Spring Security OAuth2 之token 和 refresh token


本文梳理oauth2登錄,刷新,注銷對內存中token和refresh token的操作,同時提供客戶端使用token的方案。

 

一、Spring Security OAuth2提供操作token的接口:

 

接口
grant_type參數 說明
類DefaultTokenServices
/oauth/token password 登錄獲取token
方法createAccessToken
/oauth/token refresh_token 刷新token
方法refreshAccessToken
/auth/revokeToken自定義   自定義注銷
方法revokeToken

 

繼續參考下一個表對DefaultTokenServices詳細說明

 

二、類DefaultTokenServices

 

本質上是DefaultTokenServices類對token和refresh token的操作,所以梳理這個類就可以。

 

針對一個client and username

 

方法

規則

等錄createAccessToken方法

    1. 如果存在token,則更新用戶信息,復用原來token/refresh token,時間繼續計算,直接返回token(這里客戶端無法判斷refresh token過期時間)

    2. 如果存在token,剛好過期,則重新生成token, 復用原來refresh token, 所有時間重新計算;

    3. 如果不存在token,則新生成token/refresh token , 時間也是新的;

刷新refreshAccessToken方法

      1. 如果不存在或者過期refresh token,拋出異常/客戶端返回403;

      2. 如果存在refresh token, 刪除所有舊的相關token, 生成新的token(新時間)

      3. 判斷是否復用refresh token, 復用則不重新生成refresh token; 不復用, 則新生成refresh_token, 時間也刷新

 

注銷revokeToken方法

    1. 查詢token存在時候, 刪除token/refresh token;

    2. 查詢token不存在時候, 不進行操作;

 

注意:在公眾號回復關鍵字:token 

可以獲取更多資料

 

三、客戶端使用token步驟

 

業務方服務端使用token方案:(token設置有效期30天,refresh token有效期大於30天/如果永久有效有風險)

 

以下是處理token步驟:

 

1. 登錄獲取token和refresh token

{ 

"access_token": "5427cac5-9e00-4e01-8cec-b4d36ca7d5fa",


"token_type": "bearer",


"refresh_token": "c169fcc7-4f75-497d-8f6b-4862f5a36d18",


"expires_in": 5,


"scope": "write api"

}

 

2. 在token有效期內, 用refresh token刷新token獲取新token

{ 

"access_token": "66cd5f7c-9b38-4261-9871-595f9748f6b6",

"token_type": "bearer",


"refresh_token": "c169fcc7-4f75-497d-8f6b-4862f5a36d18",


"expires_in": 9,


"scope": "write api"

}

3. 如果refresh token 刷新token時候403, 則進行第1步登錄獲取token和refresh token

 

 http status 403 Forbidden

{

"code": 400,


"message": "Invalid refresh token: c169fcc7-4f75-497d-8f6b-4862f5a36d19",


"data": null

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM