2013-06-26 12 views
16

Ich verwende OAuth 2.0 mit Feder für die Token-Generierung und ich möchte expire_in manuell festlegen, damit Token nach meinen Kriterien ablaufen kann. Kann mir jemand helfen?Wie setze expire_in in OAUTH 2.0?

Dies ist meine Antwort:

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

Antwort

-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

configure Ihre oauth Konfiguration Ihre Bean TokenServices ändern und accessTokenValiditySeconds-Eigenschaft:

<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
  • eine benutzerdefinierte Klasse von AuthorizationCodeAccessTokenProvider erstellen und überschreibe th e Eltern

    public method obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request) 
    
  • In der überschriebene Methode der benutzerdefinierten Klasse, rufen Klasse auf die Programmlogik der Mutter:

    DefaultOAuth2AccessToken token = super.obtainAccessToken(details, request); 
    
  • Dieses eine AccessToken zurück. Jetzt , man muss nur den abgelaufenen Wert dieses Token manipuliert direkt, durch einen Zeitstempel aus der Vergangenheit Bereitstellung token.setExpiresIn(int timestamp)

16

Es kann eingestellt werden mit einem ClientBuilder von einem ClientDetailsServiceConfigurer erhalten.

@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 
} 

oder direkt auf DefaultTokenServices je nach Bedarf.

@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

Wenn Sie grails Sicherheit oauth2 Anbieter verwenden, können Sie nur Grails-app/conf/Frühjahr/resources.groovy

ändern
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

Sie können auch die DefaultTokenServices im application.yaml file konfigurieren.

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

Verwandte Themen