使っています OAuth 2.0
を使用してトークンを生成し、expire_in
手動で使用すると、私の基準に従ってトークンの有効期限が切れます。誰か助けてくれませんか?
これは私の応答です:
{
access_token: "c7a6cb95-1506-40e7-87d1-ddef0a239f64"
token_type: "bearer"
expires_in: 43199
scope: "read"
}
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);
}
}
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>
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
AuthorizationCodeAccessTokenProviderのカスタムクラスを作成し、親をオーバーライドする
_public method obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest request)
_
カスタムクラスのオーバーライドされたメソッドで、その親クラスのプログラムロジックを呼び出します。
_DefaultOAuth2AccessToken token = super.obtainAccessToken(details, request);
_
これはAccessTokenを返します。ここで、過去のタイムスタンプを提供することにより、そのトークンの期限切れの値を直接操作する必要がありますtoken.setExpiresIn(int timestamp)
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')
}
}