一、用戶身份認證
1、單一服務器模式(單體應用)
一般過程如下:
- 用戶向服務器發送用戶名和密碼。
- 驗證服務器后,相關數據(如用戶名,用戶角色等)將保存在當前會話(session)中。
- 服務器向用戶返回session_id,session信息都會寫入到用戶的Cookie。
- 用戶的每個后續請求都將通過在Cookie中取出session_id傳給服務器。
- 服務器收到session_id並對比之前保存的數據,確認用戶的身份。
缺點:
- 單點性能壓力,無法擴展。
- 分布式架構中,需要session共享方案,session共享方案存在性能瓶頸。
2、SSO(Single Sign On)模式(分布式應用)
分布式,SSO(single sign on)模式:單點登錄英文全稱Single Sign On,簡稱就是SSO。它的解釋是:在多個應用系統中,只需要登錄一次,就可以訪問其他相互信任的應用系統。
- 如圖所示,圖中有3個系統,分別是業務A、業務B、和SSO。
- 業務A、業務B沒有登錄模塊。
- 而SSO只有登錄模塊,沒有其他的業務模塊。
一般過程如下:
- 當業務A、業務B需要登錄時,將跳到SSO系統。
- SSO從用戶信息數據庫中獲取用戶信息並校驗用戶信息,SSO系統完成登錄。
- 然后將用戶信息存入緩存(例如redis)。
- 當用戶訪問業務A或業務B,需要判斷用戶是否登錄時,將跳轉到SSO系統中進行用戶身份驗證,SSO判斷緩存中是否存在用戶身份信息。
- 這樣,只要其中一個系統完成登錄,其他的應用系統也就隨之登錄了。這就是單點登錄(SSO)的定義。
優點 :
用戶身份信息獨立管理,更好的分布式管理。可以自己擴展安全策略
缺點:
認證服務器訪問壓力較大。
3、Token模式
優點:
- 無狀態: token是無狀態,session是有狀態的
- 基於標准化:你的API可以采用標准化的 JSON Web Token (JWT)
缺點:
- 占用帶寬
- 無法在服務器端銷毀