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方法 |
|
刷新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}