//Oauth2刷新令牌 流程
//开启刷新令牌 从下面这句开始进入流程
myTokenServices.refreshAccessToken(existToken.getRefreshToken().getValue(),tokenRequest);
//refresh:ee23fc70-ada8-4e0d-b399-9b399c4849e5 从redis拿到key对应的刷新令牌对象
OAuth2RefreshToken refreshToken = this.tokenStore.readRefreshToken(refreshTokenValue);
//"refresh_auth:"+刷新令牌 拿到包含客户端信息和用户信息的OAuth2Authentication认证对象
OAuth2Authentication authentication = this.tokenStore.readAuthenticationForRefreshToken(refreshToken);
//这里红色user是从redis里面authentication.getUserAuthentication()得到的 将和从数据库提取的user做对比 不通过返回null
Authentication user = this.authenticationManager.authenticate(user);
Object details = authentication.getDetails();
//绿色user是新的user 从数据库中新提取的 重新生成包含客户端信息和用户信息的OAuth2Authentication认证对象authentication
authentication = new OAuth2Authentication(authentication.getOAuth2Request(), user);
//重新生成包含客户端信息和用户信息的OAuth2Authentication认证对象authentication
authentication.setDetails(details);
//从redis删除旧的访问令牌
OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
if(oAuth2AccessToken != null){
log.info("----access_token是:"+oAuth2AccessToken.getValue());
tokenStore.removeAccessToken(oAuth2AccessToken);
}
//根据refreshToken生成新的访问令牌
//这里authentication是OAuth2Authentication 包含客户端信息和用户信息的OAuth2Authentication认证对象
OAuth2AccessToken accessToken = tokenStore.createAccessToken(authentication, refreshToken);
其他文章
// 用户不同客户端登陆 账号只会在一个客户端生效
Oauth2 互斥令牌 用户再次登陆后生成新accessToken 旧的作废
// accessToken访问令牌 续期 用户每进行一次业务操作,访问令牌过期时间往后延续20分钟