Java Spring Security OAuth2未使用属性中的令牌过期值
我试图将我的应用程序配置为从属性文件中提取访问和刷新令牌过期时间,而不是在java配置中设置它们。但是,它不会拾取它们,而是恢复为默认值 下面是我的Java配置示例,我在其中手动设置expire值。当我这样做的时候,效果很好Java Spring Security OAuth2未使用属性中的令牌过期值,java,spring,spring-security,oauth-2.0,spring-security-oauth2,Java,Spring,Spring Security,Oauth 2.0,Spring Security Oauth2,我试图将我的应用程序配置为从属性文件中提取访问和刷新令牌过期时间,而不是在java配置中设置它们。但是,它不会拾取它们,而是恢复为默认值 下面是我的Java配置示例,我在其中手动设置expire值。当我这样做的时候,效果很好 @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { ....
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
....
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("myclient")
.secret("mysecret")
.authorizedGrantTypes("password", "refresh_token")
.scopes("my-app")
.autoApprove("my-app")
.accessTokenValiditySeconds(30)
.refreshTokenValiditySeconds(3200);
}
}
然而,当我试图在我的应用程序.properties
文件中这样设置它们时,它不起作用
# Security
security.oauth2.client.access-token-validity-seconds=60
security.oauth2.client.refresh-token-validity-seconds=3200
我希望这个回复不会太晚 我遇到了同样的问题,后来我发现这是一个bug 对于autowired For ClientDetails服务,它有一个例外:
Method threw 'org.springframework.beans.factory.BeanCreationException' exception. Cannot evaluate com.sun.proxy.$Proxy135.toString()
因此clientDetailsService的值为null。然后它将使用defaul值,因此您在config类中的值设置不起作用。但是如果您在application.yml中执行此操作,它将在不检查clientDetailsService的情况下设置此值,因此它可以工作
我已经向团队报告了这个问题,希望有人能解决这个错误。
一种可能的解决方案是在application.yml文件中设置值或在DefaultTokenServices中设置值,如下所示:
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(this.tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
defaultTokenServices.setTokenEnhancer(this.accessTokenConverter());
defaultTokenServices.setAccessTokenValiditySeconds(100);
return defaultTokenServices;
}
也在寻找这个答案,并尝试了DeezCashews提出的解决方案。但它对我不起作用,因为有一部分代码首先检查这个值是否设置在列access\u token\u validity table oauth\u client\u details中,然后才检查来自tokenServices的greps值。所以,如果在oauth_client_details表中设置了“expires_in”,则需要在那里进行更改 检查数据库中有效性属性的代码:
protected int getAccessTokenValiditySeconds(OAuth2Request clientAuth) {
if (clientDetailsService != null) {
ClientDetails client = clientDetailsService.loadClientByClientId(clientAuth.getClientId());
Integer validity = client.getAccessTokenValiditySeconds();
if (validity != null) {
return validity;
}
}
return accessTokenValiditySeconds;
}
您使用哪个版本的Spring Boot?我在Spring Boot的源代码或文档中找不到这些属性。我正在使用Spring Boot
1.5.3
和Spring secuirty oauth22.2.0.13
您能提供一个到命名这些属性的文档的链接吗?我会说,属性不存在。我只是基于IntelliJ自动完成它们并显示它们的文档这一事实。这只是一个类。我找不到那幢房子了。