OAuth 2.0實現(xiàn)單點登錄

基于OAuth 2.0實現(xiàn)單點登錄(SSO)的核心流程


1. 授權(quán)碼模式流程

OAuth 2.0的==?授權(quán)碼模式(Authorization Code Grant)?==是實現(xiàn)SSO的推薦方案,流程如下:

1.1 用戶訪問客戶端應(yīng)用

用戶首次訪問客戶端A(如門戶網(wǎng)站),客戶端檢測無有效令牌,將用戶重定向至==?認證服務(wù)器?==的授權(quán)端點,攜帶以下參數(shù):

https://auth-server.com/oauth/authorize?
  response_type=code&
  client_id=CLIENT_A_ID&
  redirect_uri=https://client-a.com/callback&
  scope=openid profile&
  state=random_string

response_type=code:請求授權(quán)碼。
state:防止CSRF攻擊的隨機值

1.2 用戶登錄與授權(quán)
用戶在認證服務(wù)器頁面輸入憑證完成登錄。
認證服務(wù)器驗證身份后,詢問用戶是否授權(quán)客戶端A訪問其資源(如用戶信息)。
1.3 生成授權(quán)碼
用戶同意授權(quán)后,認證服務(wù)器生成一次性授權(quán)碼(Authorization Code),并通過重定向返回給客戶端A:

https://client-a.com/callback?code=AUTH_CODE_123&state=random_string
授權(quán)碼有效期通常為2-10分鐘,需客戶端快速處理。

1.4 客戶端換取訪問令牌
客戶端A使用授權(quán)碼向認證服務(wù)器的令牌端點請求訪問令牌(Access Token):
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=AUTH_CODE_123&
redirect_uri=https://client-a.com/callback&
client_id=CLIENT_A_ID&
client_secret=CLIENT_A_SECRET
認證服務(wù)器驗證授權(quán)碼和客戶端憑證,返回訪問令牌和刷新令牌(Refresh Token)。

1.5 訪問受保護資源
客戶端A使用訪問令牌向資源服務(wù)器請求用戶數(shù)據(jù)(如用戶ID、角色):
GET /userinfo HTTP/1.1
Authorization: Bearer ACCESS_TOKEN_XYZ
資源服務(wù)器驗證令牌有效性后返回數(shù)據(jù),完成用戶登錄。

  1. 跨應(yīng)用單點登錄
    用戶訪問另一客戶端B時,流程如下:
    2.1 客戶端B重定向至認證服務(wù)器
    客戶端B檢測無有效令牌,重定向至認證服務(wù)器(攜帶client_id=CLIENT_B_ID)。
    2.2 認證服務(wù)器檢查會話狀態(tài)
    若用戶已通過客戶端A登錄且會話有效(如存在認證服務(wù)器的Cookie),直接生成新授權(quán)碼,無需重復(fù)登錄。
    客戶端B重復(fù)步驟1.3-1.5,獲取訪問令牌并完成登錄。

  2. 安全增強與關(guān)鍵機制
    3.1 令牌管理
    短期訪問令牌:有效期短(如1小時),降低泄露風(fēng)險。
    刷新令牌:長期有效(如7天),用于獲取新訪問令牌,需安全存儲(如HTTP-only Cookie)。
    3.2 單點登出(可選)
    調(diào)用認證服務(wù)器的令牌撤銷端點,使令牌失效。
    清除所有客戶端和認證服務(wù)器的會話Cookie。
    3.3 JWT令牌(可選)
    使用JWT作為訪問令牌,包含用戶信息(如sub、roles),減少資源服務(wù)器查詢開銷。
    需簽名驗證和有效期檢查。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容