本文梳理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方法 |
|
刷新refreshAccessToken方法 |
|
注銷revokeToken方法 |
|
注意:在公眾號回復關鍵字: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}