【實現機制(整理抽象版)】數據庫
單點登陸的機制實際上是比較簡單的,用一個現實中的例子作比較。頤和園是北京著名的旅遊景點,也是我常去的地方。在頤和園內部有許多獨立的景點,例如「蘇 州街」、「佛香閣」和「德和園」,均可以在各個景點門口單獨買票。不少遊客須要遊玩全部德景點,這種買票方式很不方便,須要在每一個景點門口排隊買票,錢包 拿 進拿出的,容易丟失,很不安全。因而絕大多數遊客選擇在大門口買一張通票(也叫套票),就能夠玩遍全部的景點而不須要從新再買票。他們只須要在每一個景點門 口出示一下剛纔買的套票就可以被容許進入每一個獨立的景點。安全
單點登陸的機制也同樣,以下圖所示,當用戶第一次訪問應用系統1的時候,由於尚未登陸,會被引導到認證系統中進行登陸(1);根據用戶提供的登陸信 息, 認證系統進行身份效驗,若是經過效驗,應該返回給用戶一個認證的憑據--ticket(2);用戶再訪問別的應用的時候(3,5)就會將這個ticket 帶上,做爲本身認證的憑據,應用系統接受到請求以後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6)。若是經過效驗,用戶就可 以在不用再次登陸的狀況下訪問應用系統2和應用系統3了。spa
當前筆者採用的集成平臺單點登陸的應用場景和傳統企業信息集成裏面的單點登陸稍有不一樣,這裏引進了三種驗證措施:集成平臺標識&憑證&令牌號,具體以下:中間件
一、經過服務總線進行各第三方廠家系統的憑證校驗,確認消息發送方是可信任系統;blog
二、經過有時效性的令牌方式進行單次登陸操做校驗,登陸信息在校驗經過後由集成平臺返回;接口
三、第三方並不須要摒棄自身的登陸功能,由於咱們在單點登陸的時候,經過集成平臺標識來判斷進行的是單點登陸操做,不影響原有業務;文檔
實現單點登陸的前提是員工信息一致性,咱們經過員工對照功能保證其信息的一致性。同步
關於員工對照使用的惟一信息,對於公司的系統,咱們採用員工內部序號;而對於其餘廠商的外部系統,咱們提供「工做牌號」或者「工做牌號+員工姓名」的組合等方式來識別員工,經過程序去適配。登錄
經過員工對照後,系統,科室,角色等其餘信息均可以經過接口方式獲取,不須要和第三方進行任何對照和關聯。在實現員工對照後,其餘廠商的系統便可像公司系統那樣,按咱們的接口文檔改造後,順利接入集成平臺。遍歷
集成平臺單點登陸的應用場景和傳統企業信息集成裏面的單點登陸稍有不一樣,平臺和第三方系統的對接都是經過WS方式完成,而不是由平臺直接操做子系統數據庫完成;採用消息中間件的總線方式進行接口管理與操做,加強了數據準確性和流程可控性;同時引進了憑證號,令牌號和集成平臺標識這三種驗證機制,充分保證了系統的安全性。
單點登陸流程:
1)用戶登陸門戶,門戶程序會經過服務總線遍歷不一樣廠商的接口,採集該員工在不一樣子系統擁有的權限,並在SSO組件框中顯示子系統列表。
2)用戶若須要進入某系統,則點擊相應圖標,選擇登陸科室和角色等信息(經過接口獲取),此時會在平臺這邊生成令牌,同時在本地打開相應業務系統,並傳遞令牌號和集成平臺標識。
3)該業務系統識別集成平臺標識後,使用令牌來調用平臺的令牌驗證接口,若是驗證成功則利用返回的信息進行登陸,錯誤則給予提示。
PS:上面說的流程是程序實現流程,醫護人員使用流程僅僅是登陸門戶,單擊系統直接進入便可,just so so。
關於流程,筆者畫了一張簡圖表示,有點粗糙,湊活着看。
兩種策略(單向)
一、惟一映射:兩套系統用戶產生一一映射關係。(攜帶帳號密碼,需同步)
二、惟一ID認證:主系統入口進入後無需再驗證密碼,有此ID身份便可。
三、子系統雙重認證機制:用戶單獨帳號+密碼登陸子系統,單點登陸帳號+身份認證。