我有一些用户正在使用有效的 JWT token 访问一些 API,但是因为他们的任务花费的时间比 token 过期时间长得多,当他们再次访问 API 时,JWT token 已经过期。他们不应该刷新他们的 token ,他们必须使用相同的 token 并使用过期的 token 访问某些 API。
我正在使用 spring.security.oauth2.resourceserver
与我们的授权服务器进行身份验证。
因此,我想要实现的是,如果 token 来源正确并且格式良好,即使 token 已过期,我也需要接受请求。
是的,我知道这似乎不是一个好方法,但如果可能,请教育我。
我已经读过 ClientHttpRequestInterceptor
来自 here并深入到 resource server
的源代码但找不到合适的方法。
最佳答案
我完全建议您不要这样做,因为如果某个恶意用户从某人那里窃取了 JWT,他将能够永远请求 protected 资源,因为 token 不会过期。在这种情况下你应该做的是刷新 token ,请前往 docs for refreshing the access token .
但出于知识目的,可以提供自定义 JwtDecoder
可以按照您想要的方式验证 JWT。
你应该只暴露一个 @Bean
类型 JwtDecoder
使用您的特定配置,如下所示:
@Bean
public JwtDecoder jwtDecoder() {
OAuth2TokenValidator<Jwt> myCustomJwtValidator = new MyImplementationOfOAuth2TokenValidator();
NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withPublicKey(myPublicKey).build();
jwtDecoder.setJwtValidator(myCustomJwtValidator);
return jwtDecoder;
}
您可以在 documentation 上找到更多详细信息.
关于spring-boot - Spring Boot 安全性 - 允许用户请求使用过期的 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67924703/