文章目錄
- 概述
- 基于Cookie
- 基于Token(OAuth, JWT)
- 集中式認證服務 (CAS, SAML)
- 分布式Session:
- 輕型目錄訪問協議(LDAP)
- OAuth 2.0/OIDC
- Kerberos
概述
單點登錄(Single Sign-On,簡稱SSO)是一種身份驗證機制,允許用戶在多個應用程序和網站上使用一個憑據進行登錄, 就是說 允許用戶在多個應用或服務中只需進行一次身份驗證即可訪問所有授權的服務
基于Cookie
利用父域的Cookie機制,在主域名下設置一個共享的Cookie,子域名可以讀取這個Cookie來確認用戶的身份。
這種方法適用于同主域名下的多個子域名之間的SSO,但如果不同主域名則不適用。
優點: 實現簡單,適用于同主域名下的多個子域名之間。
缺點: 不適用于跨主域名的情況,安全性較低,容易受到中間人攻擊和跨站腳本(XSS)攻擊。
基于Token(OAuth, JWT)
用戶在身份提供者處驗證后,獲得一個Token(例如OAuth中的Access Token或JWT)。
Token被存儲在客戶端(如Cookie、LocalStorage)或服務器端(如Session),當用戶訪問其他應用時,應用通過Token驗證用戶身份。
這種方式支持跨域,且更安全,因為Token可以加密。
優點: 支持跨域,Token可加密傳輸,提高安全性;Token可以離線存儲,減輕服務器負擔。
缺點: 需要妥善管理Token的有效期和安全性,防止Token泄露;JWT如果過長可能影響性能。
集中式認證服務 (CAS, SAML)
中心化認證服務作為單一入口,所有應用都依賴它進行身份驗證。
用戶在CAS/SAML服務器上登錄后,CAS/SAML服務器會生成一個Ticket或Assertion傳遞給應用,應用再使用這個Ticket或Assertion與CAS/SAML服務器通信,確認用戶身份。
CAS和SAML是兩種廣泛使用的集中式認證協議。
優點: 提供標準化的SSO解決方案,易于集成;能夠支持多種不同的應用和服務。
缺點: 中心化服務可能成為單點故障;配置和維護較為復雜。
分布式Session:
使用共享的Session存儲(如Redis、Memcached),所有應用都可以訪問同一個Session存儲。
用戶在任一應用登錄后,Session信息被寫入共享存儲,其他應用可以通過讀取這個共享Session來確定用戶狀態。
優點: 提高了應用的擴展性和可用性,Session數據可以在集群中共享。
缺點: 增加了對共享存儲系統的依賴,存儲系統故障會影響整個SSO流程。
輕型目錄訪問協議(LDAP)
LDAP用于存儲和檢索網絡上的用戶和組信息,支持SSO。
應用通過查詢LDAP服務器驗證用戶身份,避免了每個應用單獨維護用戶信息。
優點: 便于管理和查詢用戶信息,適用于大型企業環境。
缺點: 配置和維護相對復雜,不適合小型或臨時項目。
OAuth 2.0/OIDC
OAuth 2.0是一個授權框架,OpenID Connect(OIDC)建立在OAuth 2.0之上,提供了身份驗證功能。
用戶在一個授權服務器上登錄后,授權服務器向客戶端應用頒發令牌,應用使用這些令牌來訪問資源服務器或確認用戶身份。
優點: 標準化接口,易于第三方應用集成;支持多種授權模式。
缺點: 實現細節較多,需要仔細設計安全措施;可能存在權限過寬的問題。
Kerberos
Kerberos是一種網絡認證協議,特別適合企業內部網絡環境,支持SSO。
Kerberos使用票證(Ticket)機制來驗證用戶和服務,用戶登錄后會收到一系列票證,這些票證可以用于訪問網絡中的其他服務而無需再次輸入密碼。
優點: 安全性高,適用于大型企業內部網絡;支持多種認證機制。
缺點: 配置復雜,維護成本高;僅限于內部網絡,不適用于互聯網環境。