Spring 带有 jwt 的安全 oauth2,撤销刷新令牌

Spring Security oauth2 with jwt, revocation of refresh token

我目前在 spring 启动时通过 oauth2 运行 实现了 spring 安全性。它按预期工作,我已将访问令牌的有效性设置为 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 class 后,storeRefreshToken 和 storeAccessToken 方法如预期的那样是空白的,因为令牌已签名,它们不必存储。

我的计划是将生成的刷新令牌存储在数据库中,然后将此作为刷新令牌有效的要求。

我一直在查看 JwtTokenStore class,看起来它可以有一个可选的 ApprovalStore。 这是解决这个问题的正确方向吗?

我认为问题与描述的问题非常相似。所以你可能想看看已接受的答案。

除此之外,我还有两个想法要分享:

删除客户端

这实际上取决于您如何使用客户端 ID。但是您当然可以删除客户端 - 这会使刷新过程失败。

停用用户

来自文档:

if you inject a UserDetailsService or if one is configured globally anyway (e.g. in a GlobalAuthenticationManagerConfigurer) then a refresh token grant will contain a check on the user details, to ensure that the account is still active

因此,如果您使用 UserDetailsService 并且您的令牌与用户相关联,您可以停用该用户以使刷新过程失败。