我目前有一个Spring安全性的实现,oauth2在spring boot上运行。它按预期工作,我已将访问令牌的有效性设置为10分钟,并将令牌刷新为30天。
但是,如果用户丢失了设备并希望该客户端被注销,我希望能够使刷新令牌无效。
我的令牌存储看起来如下:
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
final JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAcccessTokenConverter.setSigningKey(this.secret);
return jwtAcccessTokenConverter;
}
@Bean
public TokenStore tokenStore(){
return new JwtTokenStore(jwtAccessTokenConverter());
}
在查看JwtTokenStore类之后,storeRefreshToken和storeAccessToken方法按预期为空,因为令牌已签名,因此不必存储它们。
我的计划是将生成的刷新令牌存储在数据库中,然后将其作为刷新令牌有效的要求。
我一直在查看JwtTokenStore类,看起来它可以有一个可选的ApprovalStore。 这是解决这个问题的正确方向吗?
答案 0 :(得分:0)
我认为这个问题与here描述的问题非常相似。所以你可能想看看接受的答案。
除此之外,我还想提出两个额外的想法:
删除客户
这实际上取决于您如何使用客户端ID。但是,您当然可以删除客户端 - 这会使刷新过程失败。
停用用户
来自文档:
如果您注入UserDetailsService或全局配置了一个UserDetailsService 无论如何(例如在GlobalAuthenticationManagerConfigurer中)然后a 刷新令牌授权将包含对用户详细信息的检查 确保帐户仍处于有效状态
因此,如果您使用UserDetailsService
并且您的令牌与用户相关联,则可以停用该用户以使刷新过程失败。