【技術乾貨】什麼是單一登入/單點登入SSO(Single Sign-On)授權
一、什麼是單點登入SSO(Single Sign-On)?
單一登入,又稱為單點登入(英文:Single sign-on,縮寫為 SSO):是一個集中身分登入管理的站台。各種互不相關的第三方軟體(Web、 APP),可以透過登入同一站台,取得使用者資料的存取權限。
SSO是一種統一認證和授權機制,指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入一次,即通過一個應用中的安全驗證後,再訪問其他應用中的受保護資源時,不再需要重新登入驗證。
SSO 可集中身分管理,個別的 APP 或 Web 不需自行建置身分登入系統,只要透過登入 SSO 就可以存取到資料,User 不需要在每個網站都註冊帳號。舉例來說,User 只要在 Facebook 或 Google 註冊過一次,在可用 Facebook 與 Google 帳號登入的網站就可以一鍵登入。 簡單說就是使用者只有一次的註冊,之後就可以都用同一組身份來單一登入不同 app 或 網站 的意思。
二、單點登入SSO(Single Sign-On)解決了什麼問題?
解決了使用者只需要登入一次就可以訪問所有相互信任的應用系統,而不用重複登入。
三、單點登入SSO(Single Sign-On)的技術實現機制
如下圖所示:
當用戶第一次訪問應用系統1的時候,因為還沒有登入,會被引導到認證系統中進行登入;根據使用者提供的登入資訊,認證系統進行身份效驗,如果通過效驗,應該返回給使用者一個認證的憑據--ticket;使用者再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6)。
如果通過效驗,使用者就可以在不用再次登入的情況下訪問應用系統2和應用系統3了。
從上圖可以看出sso的實現技術點:
1)所有應用系統共享一個身份認證系統。
統一的認證系統是SSO的前提之一。認證系統的主要功能是將使用者的登入資訊和使用者資訊庫相比較,對使用者進行登入認證;認證成功後,認證系統應該生成統一的認證標誌(ticket),返還給使用者。另外,認證系統還應該對ticket進行效驗,判斷其有效性。
2)所有應用系統能夠識別和提取ticket資訊
要實現SSO的功能,讓使用者只登入一次,就必須讓應用系統能夠識別已經登入過的使用者。應用系統應該能對ticket進行識別和提取,通過與認證系統的通訊,能自動判斷當前使用者是否登入過,從而完成單點登入的功能。
關於統一身份認證機制:如下圖
① 使用者請求訪問業務系統。
②業務系統在系統中檢視是否有對應請求的有效令牌,若有,則讀取對應的身份資訊,允許其訪問;若沒有或令牌無效,則把使用者重定向到統一身份認證平臺,並攜帶業務系統地址,進入第③步。
③在統一身份認證平臺提供的頁面中,使用者輸入身份憑證資訊,平臺驗證此身份憑證資訊,若有效,則生成一個有效的令牌給使用者,進入第④步;若無效,則繼續進行認證,直到認證成功或退出為止。
④使用者攜帶第③步獲取的令牌,再次訪問業務系統。
⑤業務系統獲取使用者攜帶的令牌,提交到認證平臺進行有效性檢查和身份資訊獲取。
⑥若令牌通過有效性檢查,則認證平臺會把令牌對應的使用者身份資訊返回給業務系統,業務系統把身份資訊和有效令牌寫入會話狀態中,允許使用者以此身份資訊進行業務系統的各種操作;若令牌未通過有效性檢查,則會再次重定向到認證平臺,返回第③步。
通過統一身份認證平臺獲取的有效令牌,可以在各個業務系統之間實現應用漫遊。
四、單點登入SSO(Single Sign-On)的優點
1)提高使用者的效率。
使用者不再被多次登入困擾,也不需要記住多個 ID 和密碼。另外,使用者忘記密碼並求助於支援人員的情況也會減少。
2)提高開發人員的效率。
SSO 為開發人員提供了一個通用的身份驗證框架。實際上,如果 SSO 機制是獨立的,那麼開發人員就完全不需要為身份驗證操心。他們可以假設,只要對應用程式的請求附帶一個使用者名稱,身份驗證就已經完成了。
3)簡化管理。
如果應用程式加入了單點登入協議,管理使用者帳號的負擔就會減輕。簡化的程度取決於應用程式,因為 SSO 只處理身份驗證。所以,應用程式可能仍然需要設定使用者的屬性(比如訪問特權)。
五、單點登入SSO(Single Sign-On)的缺點
1)不利於重構
因為涉及到的系統很多,要重構必須要相容所有的系統,可能很耗時
2) 無人看守桌面
因為只需要登入一次,所有的授權的應用系統都可以訪問,可能導致一些很重要的資訊洩露。
六、單點登入SSO(Single Sign-On)的實現方式
常見的SSO實現方式有幾種,分別為:OAUTH、OPENID、SAML、CAS.. 等等。
1)OAuth
OAuth(Open standard for AUTHorization 開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上的資源。
2)OPENID
OpenID 分散了身份驗證。是 IDP 提供一個身份唯一標識把第三方的應用帳號綁定到唯一標識上。
3)SAML
SAML 支持 XACML 協議進行權限控制。SAML 協議較 OAUTH 來說確實比較複雜,但是功能也十分強大,支持認證,權限控制和用戶屬性。
4)CAS
CAS 集中了身份驗證。本身沒有授權,也沒有權限控制,但是 CAS 支持 SAML,所以就支持了權限控制。
沒有留言:
張貼留言