Spring 启动安全性 - 允许用户请求使用过期的 JWT 令牌

Adi*_*aöz 5 spring-security jwt spring-boot spring-security-oauth2 spring-security-rest

我有一些用户正在使用有效的 JWT 令牌访问一些 API,但是因为他们的任务花费的时间比令牌过期时间长得多,当他们再次访问 API 时,JWT 令牌已经过期。他们不应该刷新他们的令牌,他们必须使用相同的令牌并使用过期的令牌访问某些 API。

我正在使用spring.security.oauth2.resourceserver与我们的授权服务器进行身份验证。

因此,我想要实现的是,如果令牌来源正确并且格式良好,即使令牌已过期,我也需要接受请求。

是的,我知道这似乎不是一个好方法,但如果可能,请教育我。

我已经ClientHttpRequestInterceptor这里阅读并深入研究了 的源代码,resource server但找不到合适的方法。

Mar*_*gio 0

我完全建议您不要这样做,因为如果某些恶意用户从某人那里窃取了 JWT,他将能够永远请求受保护的资源,因为令牌不会过期。在这种情况下您应该做的是刷新令牌,请前往文档刷新访问令牌

但出于知识目的,可以提供可以按照JwtDecoder您想要的方式验证 JWT 的自定义。您应该只公开具有特定配置的@Bean类型,如下所示:JwtDecoder

@Bean
public JwtDecoder jwtDecoder() {
    OAuth2TokenValidator<Jwt> myCustomJwtValidator = new MyImplementationOfOAuth2TokenValidator();
    NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withPublicKey(myPublicKey).build();
    jwtDecoder.setJwtValidator(myCustomJwtValidator);
    return jwtDecoder;
}
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到更多详细信息。