使用 JdbcStore 时配置 JWT 令牌过期时间

Posted

技术标签:

【中文标题】使用 JdbcStore 时配置 JWT 令牌过期时间【英文标题】:Configure JWT token expire time when JdbcStore is used 【发布时间】:2020-11-08 03:01:22 【问题描述】:

我正在尝试使用带有 jdbcTokenStore 的 JWT 通过 OAuth2 实现 Spring Security:

    @Bean
    public TokenStore tokenStore() 
        return new JdbcTokenStore(dataSource);
    

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() 
        final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        defaultTokenServices.setSupportRefreshToken(true);
        defaultTokenServices.setAccessTokenValiditySeconds(60);
        defaultTokenServices.setRefreshTokenValiditySeconds(80);
        defaultTokenServices.setReuseRefreshToken(false);
        return defaultTokenServices;
    

Github

但是在我使用 Postman 创建 Token 后,我总是得到价值:


    "access_token": "....",
    "token_type": "bearer",
    "refresh_token": "....",
    "expires_in": 41502,
    "scope": "read",
    "organization": "admin Drivelog",
    "jti": "2f33707a-30e3-4145-9d9d-7c2e4a4535dd"

ypi 知道如何配置访问令牌过期时间。由于某种原因,setAccessTokenValiditySeconds 无法正常工作。

【问题讨论】:

检查数据库表oauth_client_details列值access_token_validity & refresh_token_validity 我创建了这张表,但由于某种原因它总是空的 您的实现看起来不错。你能分享邮递员请求的截图吗? @PeterPenzov 如果 oauth_client_details 为空,您将 client_id 和秘密等存储在哪里? Thirumal 提到的列允许您基于每个用户进行配置。 查看我为另一个问题所做的描述:***.com/questions/62956660/… 【参考方案1】:

您可能忘记配置资源服务器以使用令牌服务,例如:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter 

@Autowired
private ResourceServerTokenServices tokenServices;

@Autowired
private JwtAccessTokenConverter accessTokenConverter;

@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception 
    resources.tokenServices(tokenServices);


@Override
public void configure(HttpSecurity http) throws Exception 
    http
        .requestMatchers()
        .and()
        .authorizeRequests()
        .antMatchers("/actuator/**", "/api-docs/**","/oauth/*").permitAll()
        .antMatchers("/jwttest/**" ).authenticated();


在https://medium.com/@dassum/securing-spring-boot-rest-api-with-json-web-token-and-jdbc-token-store-67558a7d6c29中找到

【讨论】:

以上是关于使用 JdbcStore 时配置 JWT 令牌过期时间的主要内容,如果未能解决你的问题,请参考以下文章

python jwt中令牌过期时如何提取jwt令牌有效负载

如何在jwt中过期时刷新令牌

当 jwt 刷新令牌未过期时,React Native 应用程序注销

尝试进行身份验证时 JWT 令牌过期?

过期后使用刷新令牌获取访问令牌(JWT)

Webapi 2.0如何在访问令牌过期时实现刷新JWT令牌