web-dev-qa-db-ja.com

OAUTH 2.0でexpire_inを設定する方法は?

使っています OAuth 2.0を使用してトークンを生成し、expire_in手動で使用すると、私の基準に従ってトークンの有効期限が切れます。誰か助けてくれませんか?

これは私の応答です:

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

ClientBuilderから取得した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
}

または、必要に応じてDefaultTokenServicesに直接。

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

oauth Bean TokenServicesを変更し、accessTokenValiditySecondsプロパティを設定する設定:

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

application.yamlファイルDefaultTokenServicesを設定することもできます。

security:
  oauth2:
    client:
      clientId: client-id
      clientSecret: client-secret
      authorized-grant-types: authorization_code,refresh_token,password
      scope: openid
      access-token-validity-seconds: 30
6
  • AuthorizationCodeAccessTokenProviderのカスタムクラスを作成し、親をオーバーライドする

    _public method obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request)
    _
  • カスタムクラスのオーバーライドされたメソッドで、その親クラスのプログラムロジックを呼び出します。

    _DefaultOAuth2AccessToken token = super.obtainAccessToken(details, request);
    _
  • これはAccessTokenを返します。ここで、過去のタイムスタンプを提供することにより、そのトークンの期限切れの値を直接操作する必要がありますtoken.setExpiresIn(int timestamp)

1
CCC

Grails security oauth2プロバイダーを使用している場合、変更できるのは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