refreshToken刷新token后会变化的原因以及refreshToken的复用
两次使用refreshToken刷新token返回的refreshToken如下:
将两次返回的refreshToken解密后可以看到。除了ati不一样,其它参数都是一样的
ati(access token):新的访问令牌的id
jti : refreshToken 的id
既然刷出了新的token,那么ati肯定变了,那么由这些信息加密成的refreshToken自然也是一直变化的
那么如果想无限制刷新refreshtoken的有效期怎么办?
可以在认证服务器配置refreshToken的复用
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
List<TokenEnhancer> tokenEnhancers = new ArrayList<>();
tokenEnhancers.add(tokenEnhancer());
tokenEnhancers.add(jwtAccessTokenConverter());
tokenEnhancerChain.setTokenEnhancers(tokenEnhancers);
endpoints
.authenticationManager(authenticationManager)
.accessTokenConverter(jwtAccessTokenConverter())
.tokenEnhancer(tokenEnhancerChain)
.userDetailsService(userDetailsService)
// refreshToken非重复使用
.reuseRefreshTokens(false);
}
refresh token有两种使用方式:重复使用(true)、非重复使用(false),默认为true
- 重复使用:access token过期刷新时, refresh token过期时间未改变,仍以初次生成的时间为准
- 非重复使用:access token过期刷新时, refresh token过期时间延续,在refresh token有效期内刷新便永不失效达到