Spring OAUTH2 - 访问令牌到期时间

时间:2015-10-07 14:21:05

标签: spring spring-security-oauth2

是否可以以编程方式更新/重置访问令牌的到期时间?如果是,那么哪个类/过滤器最适合这样做,以便可以在JDBC令牌存储中更新到期时间。

2 个答案:

答案 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);

为此,您必须从数据库中删除现有客户端详细信息。下次进行令牌调用时,这些客户端详细信息将与更新的有效时间一起添加到数据库中。