Spring安全oauth2与jwt,撤销刷新令牌

时间:2017-06-08 08:25:50

标签: spring-boot spring-security jwt spring-security-oauth2

我目前有一个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。 这是解决这个问题的正确方向吗?

1 个答案:

答案 0 :(得分:0)

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

除此之外,我还想提出两个额外的想法:

删除客户

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

停用用户

来自文档:

  

如果您注入UserDetailsS​​ervice或全局配置了一个UserDetailsS​​ervice   无论如何(例如在GlobalAuthenticationManagerConfigurer中)然后a   刷新令牌授权将包含对用户详细信息的检查   确保帐户仍处于有效状态

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