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

}

 

posted on 2020-05-11 22:41  魔女技术团队  阅读(9497)  评论(0编辑  收藏  举报