友戶通作用友雲的用戶系統也一年多了,常常聽實施、售前等說要私有化部署友戶通,緣由無非是企業的考慮到用戶安全性和單一用戶帳號的需求。但因爲用戶管理的複雜性,友戶通部署與維護並不容易,所以常常糾結在用戶系統是用友戶通雲服務仍是要私有化部署。前端
企業私有化IT服務服務發展到幾天已經很豐富,企業內部可能部署了幾十上百的應用程序,企業對於這些應用的用戶一般採起統一的用戶中心來進行管理。算法
針對這種狀況,友戶通特定開發了聯邦用戶中心來支持企業的自有用戶中心。讓咱們一塊兒來看看這個聯邦用戶中心是如何支持企業自有用戶中心的。json
1、爲何要使用聯邦身份認證跨域
未使用聯邦身份認證時瀏覽器
o企業自有用戶中心的用戶不能訪問用友雲各個應用安全
企業應用有本身的用戶中心(如下稱爲:自有IdP),經過自有IdP認證的用戶沒法直接訪問用友雲。網絡
o用戶管理複雜併發
管理員須要分別在兩個系統中爲用戶建立帳號。jsonp
o用戶操做繁瑣加密
用戶訪問兩個系統時須要使用兩個系統的帳號登陸,須要記住兩套密碼。
使用聯邦身份認證後
o自有IdP用戶能夠直接訪問用友雲
用戶在企業自有IdP認證經過後,可直接訪問用友雲應用,無需再次通過友戶通認證。企業管理員也無需在友戶通中重複建立用戶。
o用戶管理簡單
企業管理員只須要在企業自有IdP中爲用戶建立帳號,用戶便可同時訪問兩個系統,下降了管理複雜度。
o用戶操做方便
用戶在本企業IdP中登陸便可訪問企業應用和用友雲應用,使用方便,流暢。
o深度融合
企業內部應用與用友雲在用戶系統上已經打通,在用戶打通的基礎上可根據場景進行進一步的融合。
2、友戶通支持哪些種類的企業IdP
目前友戶通已經支持了LDAP、CAS、OAuth2等標準協議的企業IdP,還支持友戶通自定義的Token機制的IdP.除了友戶通自定義的Token機制支持的企業IdP須要必定的開發量,其餘協議的企業IdP只須要在友戶通進行配置就可使用了,徹底不須要進行開發。
友戶通的聯邦用戶身份認證將來還將繼續擴展所支持的協議,很快就會增長對SAML2協議的支持。SAML2協議將不須要友戶通和企業IdP之間有直接網絡鏈接就能夠進行聯邦用戶身份認證。
3、使用友戶通的聯邦身份認證有什麼體驗
體驗一:部署實施簡單
只須要三步甚至兩步就能夠部署實施完成企業IdP與友戶通的集成
步驟一:根據須要部署yhtagent(企業IdP在內網,而友戶通須要訪問企業IdP)
步驟二:在友戶通中配置聯邦身份認證。
步驟三:在訪問用友雲的連接里加上thirducid參數(參數值由第二步肯定)。
聯邦身份認證中心配置界面
體驗二:用戶使用方便
步驟一:登陸企業IdP(LDAP用戶中心則可直接在友戶通登陸界面經過特殊用戶名進行登陸)。
步驟二:在同一個瀏覽器裏打開帶thirducid參數的用友雲連接地址,就可登陸用友雲。
企業用戶在內部應用和用友雲應用之間的切換很是方便。
對於企業客戶來講,其員工信息能夠獲得保護,雲服務的實施變得更加簡單。
4、技術挑戰與實現
挑戰一:支持LDAP協議的企業IdP時,如何肯定用戶應該在哪裏驗證。
企業內部的用戶管理常用AD域來管理,其支持LDAP協議來進行用戶查詢,用戶名密碼驗證等。
友戶通支持經過LDAP協議使用企業內部的支持LDAP協議的用戶中心帳號進行登陸。LDAP協議已經很成熟了,對接起來並不難,麻煩在於何時,去哪一個LDAP用戶中心驗證用戶。針對這個問題,咱們使用了兩種方式來解決。
支持方式一:經過特殊用戶名來肯定企業IdP
在配置LDAP用戶中心時,爲每一個LDAP用戶中心配置一個惟一標識符,在登陸的用戶名,加上一個「@」符號和惟一標識符,這樣,友戶通就能識別這個用戶是須要使用哪一個LDAP用戶中心去驗證了。這種方式適合主動打開用友雲服務的應用,在登陸主動輸入域帳號進行登陸。
支持方式二:經過URL裏的參數來肯定企業IdP
在訪問登陸頁面的URL裏增長一個參數thirdUCId,這樣在友戶通系統裏,經過thirdUCId查詢到的企業IdP是LDAP用戶中心,就能夠到相應的地方去驗證用戶了。這種方式適合在企業內部的系統裏嵌入URL連接穿透到用友雲服務的場景。
挑戰二:如何從企業IdP單點登陸到用友雲
不少企業通過了不少輪的信息化,部署了不少應用,企業爲了方便員工帳號管理及登陸管理,一般採用支持單點登陸的用戶系統來統一管理用戶帳號,及支持單點登陸。
這些企業若是也購買了用友雲的應用,企業須要使用本身的用戶帳號進行登陸,以方便進行用戶管理。
針對這種需求,友戶通支持CAS、OAuth、SAML標準的單點登陸用戶中心,登陸了企業自有用戶中心後可以直接登陸用友雲,而不須要再次輸入用戶名和密碼。
支持方式一:使用CAS協議
友戶通和企業IdP之間,走標準CAS協議,即友戶通到企業IdP申請發放ticket,企業IdP發放ticket以後重定向到友戶通,友戶通到企業IdP驗證ticket,驗證成功後便可登陸友戶通。
企業IdP負責發放ticket和驗證ticket並返回用戶信息,友戶通的負責向企業IdP申請發放ticket,獲得ticket後調用企業IdP驗證驗證ticket並獲得用戶信息,並讓用戶登陸到友戶通中。
友戶通在申請企業IdP發放ticket和驗證ticket過程當中,瀏覽器主頁面處於等待狀態,子頁面iframe負責申請發放ticket和驗證ticket的接口調用。
該方式實現的難點
一、怎麼肯定去哪一個企業IdP申請ticket從而登陸呢?咋們來個故技重施,經過URL裏的一個參數thirducid來決定去哪一個企業IdP去申請發放ticket.
二、友戶通登陸頁既要在已經登陸了企業IdP時可以自動登陸,又要在未登陸企業IdP時顯示友戶通登陸界面,兩方又不在同一個域裏,如何作到跨域呢?這裏,咱們使用了一個巧妙的方式,也是充分利用CAS標準。在CAS用戶中內心,若是已經登陸的話,將會發放ticket,而且重定向到service參數指定的url上。前端登陸界面開啓一個iframe去企業IdP申請ticket,同時service地址爲友戶通接口,這個接口驗證企業IdP發放的ticket,併發放一個友戶通登陸token,返回一個頁面將父頁面(登陸頁面)導航到友戶通自動登陸url,從而登陸進入友戶通。
圖1-2 友戶通集成企業IdP協做圖
下面咱們來看看具體是怎麼實現的。
(1)企業IdP配置。將企業IdP的信息配置到友戶通中,包括企業IdP的ticket發放地址,驗證地址,用戶信息的格式,以及發放ticket和驗證ticket時須要的一些參數的配置,以便在單點登陸過程當中使用。
(2)登陸服務申請企業IdP發放ticket.登陸服務經過url裏的參數thirducid,查詢到企業IdP的相關配置,將申請發放ticket的地址ticketrequesturl提供給前端JavaScript,前端JavaScript打開一個隱藏的iframe,將iframe的src設置爲ticketrequesturl,企業IdP將檢測瀏覽器是否登陸過且有效,若是登陸過且有效,則發放ticket,跳轉到ticketrequesturl裏的service參數的地址上,該地址爲IT服務裏的驗證企業IdP ticket接口。
(3)驗證企業IdP ticket接口(第(2)條裏用來做爲service地址)。本接口接收企業IdP發放的ticket,以及表明那個企業IdP的thirducid,經過調用相應的企業IdP的驗證ticket的接口,若是ticket合法,企業IdP會返回相應的用戶信息,友戶通將根據配置解析出用戶信息,產生一個友戶通單點登陸token(友戶通的登陸服務接口可經過此token單點登陸到友戶通中),並返回一個頁面(運行在iframe中),此頁面將會將父頁面重定向到友戶通的登陸服務接口(包含友戶通單點登陸token),走完標準友戶通的單點登陸流程後將登陸進入到友戶通。
支持方式二:使用OAuth2協議
使用OAuth2協議和CAS協議差異不大,只須要將CAS協議中申請Ticket替換成申請code,驗證ticket替換成經過code獲取accessToken及用戶信息便可。
挑戰三:如何從友戶通單點登陸到企業IdP
先登陸友戶通,而後登陸企業IdP.若是實現了企業IdP登陸到友戶通,那麼天然會有需求從友戶通登陸到企業IdP.不過,這種方式須要企業IdP作一些定製開發。
友戶通目前支持CAS、oauth2標準協議以及友戶通自定義協議可供企業IdP集成。將來將支持SAML2的協議供企業IdP集成。
友戶通提供前端登陸狀態檢測js(支持jsonp),可檢測友戶通是否已經登陸以及進行CAS發票。
友戶通還提供了js方法獲取oauth2的code(支持jsonp),供oauth2方式進行單點登陸實現。
挑戰四:企業用戶中心外網沒法訪問
企業自有用戶中心一般是部署在企業內網的,外網訪問不了。這種狀況通常有幾種解決方式。
第一種:讓企業開闢外網端口,讓外網能訪問,但這種方式會讓企業的內部用戶中心暴露在公網,企業可能會有必定的顧慮。
第二種:將外網調用變成內網調用,在企業內部部署一個應用當作中介,只暴露這個新部署的應用。
咱們選擇了第二種方式,這種方式不會暴露企業的用戶中心到公網上,打消企業的顧慮。須要開發一個應用當作中介,咱們稱爲代理(下稱yhtagent)。yhtagent和友戶通直接的通訊採用HTTPS保密通訊,若是企業還嫌不夠安全,能夠在消息內部在使用AES或者RSA等對稱或者非對稱加密算法進行加密,從而保證通訊內容的絕對安全。
使用YhtAgent時的聯邦身份認證
LDAP類型的用戶中心,Yhtagent實現友戶通到企業單向代理;CAS類型的用戶中心,Yhtagent實現友戶通到企業雙向代理。