我创建了身份验证服务器,并且工作正常,问题是当我想刷新访问令牌时,旧的访问令牌留在数据库中,并且在日志中,找不到令牌的访问令牌 < / p>
步骤如下:
我用POST /oauth/token
和grand_type=refresh_token
调用refresh_token=ACTUAL_TOKEN
,作为响应,我得到了新的刷新令牌而不是旧的刷新令牌,并且新的访问令牌引用了不存在的刷新令牌。
因此,如果我尝试使用新的刷新令牌再次调用刷新,则会收到错误消息,该令牌无效,但使用旧的令牌我获得新的访问令牌,但旧令牌仍在数据库中
我仍然无权嵌入图像,因此这是登录后和第一次刷新后的数据库状态链接。
After login DB status After first refresh
配置是这样的,因此它应该使用旧的刷新令牌:
@Bean
public DefaultTokenServices tokenServices(final TokenStore tokenStore,
final ClientDetailsService clientDetailsService) {
DefaultTokenServices tokenServices = new DefaultTokenServices();
tokenServices.setSupportRefreshToken(true);
tokenServices.setTokenStore(tokenStore);
tokenServices.setClientDetailsService(clientDetailsService);
tokenServices.setAuthenticationManager(this.authenticationManager);
return tokenServices;
}
并且看起来org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter#enhance
语句中if
中的refresh_token已更改,因为之前如果是正确的刷新令牌
DefaultOAuth2RefreshToken token = new DefaultOAuth2RefreshToken(
encode(encodedRefreshToken, authentication));
if (refreshToken instanceof ExpiringOAuth2RefreshToken) {
Date expiration = ((ExpiringOAuth2RefreshToken) refreshToken).getExpiration();
encodedRefreshToken.setExpiration(expiration);
token = new DefaultExpiringOAuth2RefreshToken(encode(encodedRefreshToken, authentication), expiration);
}
result.setRefreshToken(token);
最后,我有完整的旧access_tokens数据库。