是否可以以编程方式更新/重置访问令牌的到期时间?如果是,那么哪个类/过滤器最适合这样做,以便可以在JDBC令牌存储中更新到期时间。
答案 0 :(得分:5)
要全局更新访问令牌的到期时间,您必须创建DefaultTokenServices
&的实例。像这样注入AuthorizationServerEndpointsConfigurer
:
public AuthorizationServerTokenServices customTokenServices(){
TokenServices tokenServices = new DefaultTokenServices();
tokenServices.setReuseAccessToken(reuseAccessToken);
tokenServices.setTokenStore(tokenStore());
tokenServices.setSupportRefreshToken(true);
tokenServices.setAccessTokenValiditySeconds(<seconds>);
tokenServices.setClientDetailsService(clientDetailsService);
return tokenServices;
}
&安培;将此tokenServices
放在AuthorizationServerEndpointsConfigurer
中就像这样。
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenServices(customTokenServices()).
}
答案 1 :(得分:2)
您可以在客户端配置期间设置访问令牌的到期时间。 此处更改的值将在jdbc令牌存储中更新。
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource)
.withClient("my-client-with-password")
.authorizedGrantTypes("password")
.authorities("ROLE_CLIENT")
.scopes("read")
.resourceIds("oauth2-resource")
.accessTokenValiditySeconds(30);
为此,您必须从数据库中删除现有客户端详细信息。下次进行令牌调用时,这些客户端详细信息将与更新的有效时间一起添加到数据库中。