spring-boot - Spring Boot 安全性 - 允许用户请求使用过期的 JWT token

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

我有一些用户正在使用有效的 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/

相关文章:

java - 将用户的 OAuth2 token 放入 RestTemplate 中

spring-mvc - 如何在 Spring 启动时使用keycloak获取userinfo?

之前无法验证 JWT Token

javascript - 浏览器关闭时注销

java - Spring Boot 将文本/javascript 序列化为 JSON

javascript - 脚本标签 REACT JS 需要代理身份验证

java - GWT 和 Spring 安全

java - 带有 JWT token 的 Spring Security 在每个请求上加载 spring UserDetails 对象

java - 我们如何在 Spring Boot 中使用 @RequestBody 传递一个列表和一个单独的字符串

java - 如何使用 Spring Boot Gradle 插件和 bootJar 任务有条件地排除 java 文件?