【发布时间】:2018-08-05 02:11:42
【问题描述】:
我是 Spring 新手,我正在使用 Spring Security 开发 Spring Boot REST,目前我实现了 JWT 令牌。我有一些问题,但似乎无法找到答案。我尝试添加刷新令牌。
起初我以为我会将它与用户一起存储在数据库中,但 Spring Security 会自动完成所有操作,我似乎无法找到如何将它存储在表用户的给定字段中。
因此,继续前进,我决定尝试坚持使用 Spring Security 自动化,并将刷新令牌过期时间设置为 10 秒以测试它是否过期,但遗憾的是它没有按预期工作 - 我可以使用刷新令牌只要我想要并用它生成新的令牌。
所以在这里我有几个问题:
1.如何让刷新令牌在给定时间后过期?这是我的安全配置
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${security.signing-key}")
private String signingKey;
@Value("${security.encoding-strength}")
private Integer encodingStrength;
@Value("${security.security-realm}")
private String securityRealm;
@Autowired
private UserDetailsService userDetailsService;
@Bean
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().httpBasic()
.realmName(securityRealm).and().csrf().disable();
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey(signingKey);
return converter;
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
defaultTokenServices.setRefreshTokenValiditySeconds(10);
return defaultTokenServices;
}
}
- 是否可以将刷新令牌传递给数据库并手动检查令牌是否有效,因为这是我的第一个想法。
【问题讨论】:
标签: java spring spring-boot jwt refresh-token