web-dev-qa-db-fra.com

Comment définir expire_in dans OAUTH 2.0?

J'utilise OAuth 2.0 avec spring pour la génération de jetons et je veux définir expire_in manuellement afin que le jeton puisse expirer selon mes critères. Quelqu'un m'aider?

Voici ma réponse:

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

Il peut être défini avec un ClientBuilder obtenu à partir d'un 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
}

ou directement sur DefaultTokenServices en fonction de vos besoins.

@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);            
    }
}
23
DeezCashews

configurez votre configuration oauth en changeant vos Bean TokenServices et en définissant accessTokenValiditySeconds property:

<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>
11
Clement Martino

Vous pouvez également configurer DefaultTokenServices dans le fichier application.yaml .

security:
  oauth2:
    client:
      clientId: client-id
      clientSecret: client-secret
      authorized-grant-types: authorization_code,refresh_token,password
      scope: openid
      access-token-validity-seconds: 30
5
Lorenzo Polidori
  • Créez une classe personnalisée de AuthorizationCodeAccessTokenProvider et remplacez le parent

    public method obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request)
    
  • Dans la méthode substituée de votre classe personnalisée, appelez la logique de programme de sa classe parente:

    DefaultOAuth2AccessToken token = super.obtainAccessToken(details, request);
    
  • Cela retournera un AccessToken . Maintenant, il vous suffit de manipuler directement la valeur expirée de ce jeton, en fournissant un horodatage du passé token.setExpiresIn(int timestamp)

1
CCC

Si vous utilisez le fournisseur oauth2 security de Grails.__, vous ne pouvez modifier que grails-app/conf/spring/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')
  }

}
0
Peter.Chu