2013-06-26 20 views
16

Tôi đang sử dụng OAuth 2.0 với mùa xuân để tạo mã thông báo và tôi muốn đặt expire_in theo cách thủ công để mã thông báo có thể hết hạn theo tiêu chí của tôi. Có ai giúp tôi không?Cách đặt expire_in trong OAUTH 2.0?

Đây là câu trả lời của tôi:

{ 
    access_token: "c7a6cb95-1506-40e7-87d1-ddef0a239f64" 
    token_type: "bearer" 
    expires_in: 43199 
    scope: "read" 
} 

Trả lời

-4
public interface OAuth2AccessToken { 

    public static String BEARER_TYPE = "Bearer"; 

    public static String OAUTH2_TYPE = "OAuth2"; 

    /** 
    * The access token issued by the authorization server. This value is REQUIRED. 
    */ 
    public static String ACCESS_TOKEN = "access_token"; 

    /** 
    * The type of the token issued as described in <a 
    * href="http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-7.1">Section 7.1</a>. Value is case insensitive. 
    * This value is REQUIRED. 
    */ 
    public static String TOKEN_TYPE = "token_type"; 

    /** 
    * The lifetime in seconds of the access token. For example, the value "3600" denotes that the access token will 
    * expire in one hour from the time the response was generated. This value is OPTIONAL. 
    */ 
    public static String EXPIRES_IN = "expires_in"; 

    /** 
    * The refresh token which can be used to obtain new access tokens using the same authorization grant as described 
    * in <a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-6">Section 6</a>. This value is OPTIONAL. 
    */ 
    public static String REFRESH_TOKEN = "refresh_token"; 

    /** 
    * The scope of the access token as described by <a 
    * href="http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.3">Section 3.3</a> 
    */ 
    public static String SCOPE = "scope"; 

    /** 
    * The additionalInformation map is used by the token serializers to export any fields used by extensions of OAuth. 
    * @return a map from the field name in the serialized token to the value to be exported. The default serializers 
    * make use of Jackson's automatic JSON mapping for Java objects (for the Token Endpoint flows) or implicitly call 
    * .toString() on the "value" object (for the implicit flow) as part of the serialization process. 
    */ 
    Map<String, Object> getAdditionalInformation(); 

    Set<String> getScope(); 

    OAuth2RefreshToken getRefreshToken(); 

    String getTokenType(); 

    boolean isExpired(); 

    Date getExpiration(); 

    int getExpiresIn(); 

    String getValue(); 

} 
10

cấu hình cấu hình OAuth của bạn thay đổi Bean TokenServices của bạn và thiết lập accessTokenValiditySeconds tài sản:

<bean id="tokenServices" 
    class="org.springframework.security.oauth2.provider.token.DefaultTokenServices"> 
    <property name="accessTokenValiditySeconds" value="1" /> 
    <property name="tokenStore" ref="tokenStore" /> 
    <property name="supportRefreshToken" value="true" /> 
    <property name="clientDetailsService" ref="clientDetails" /> 
</bean> 
1
  • Tạo một lớp tùy chỉnh của AuthorizationCodeAccessTokenProvider và ghi đè e mẹ

    public method obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request) 
    
  • Trong phương pháp ghi đè của lớp tùy chỉnh của bạn, kêu gọi các chương trình logic của lớp cha của nó:

    DefaultOAuth2AccessToken token = super.obtainAccessToken(details, request); 
    
  • này sẽ trả về một AccessToken. Bây giờ, bạn chỉ cần thao tác các giá trị hết hạn của thẻ trực tiếp, bằng cách cung cấp một dấu thời gian từ quá khứ token.setExpiresIn(int timestamp)

16

Nó có thể được thiết lập với một ClientBuilder thu được từ một ClientDetailsServiceConfigurer.

@Configuration 
@EnableAuthorizationServer 
public class OAuth2Config extends AuthorizationServerConfigurerAdapter { 

    @Override 
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.inMemory() 
      .withClient("client") 
      .secret("secret") 
      .authorizedGrantTypes("authorization_code", "refresh_token", "password") 
      .scopes("app") 
      .accessTokenValiditySeconds(30); 
    } 

    // ... additional configuration 
} 

hoặc trực tiếp trên DefaultTokenServices tùy theo nhu cầu của bạn.

@Configuration 
@EnableAuthorizationServer 
public class OAuth2Config extends AuthorizationServerConfigurerAdapter { 
    @Override 
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 

     // optionally here you could just get endpoints.getConsumerTokenService() 
     // and cast to DefaultTokenServices and just set values needed 

     DefaultTokenServices tokenServices = new DefaultTokenServices(); 
     tokenServices.setTokenStore(endpoints.getTokenStore()); 
     tokenServices.setSupportRefreshToken(true); 
     tokenServices.setClientDetailsService(endpoints.getClientDetailsService()); 
     tokenServices.setTokenEnhancer(endpoints.getTokenEnhancer()); 
     tokenServices.setAccessTokenValiditySeconds(60); 

     endpoints.tokenServices(tokenServices);    
    } 
} 
0

Nếu bạn đang sử dụng grails nhà cung cấp an ninh OAuth2 bạn chỉ có thể thay đổi grails-app/conf/mùa xuân/resources.groovy

import org.springframework.security.oauth2.provider.token.DefaultTokenServices 

// Place your Spring DSL code here  

beans = { 

    tokenServices(DefaultTokenServices){ 
    accessTokenValiditySeconds = 600; 
    tokenStore = ref('tokenStore') 
    supportRefreshToken = true; 
    clientDetailsService = ref('clientDetailsService') 
    } 

} 
4

Bạn cũng có thể cấu hình các DefaultTokenServices trong application.yaml file.

security: 
    oauth2: 
    client: 
     clientId: client-id 
     clientSecret: client-secret 
     authorized-grant-types: authorization_code,refresh_token,password 
     scope: openid 
     access-token-validity-seconds: 30 
+1

security.oauth2.client.access-token-validity-seconds = 30 – alayor