UserInfoRestTemplateFactory 设置因 ResourceServerConfigurerAdapter 和两个 spring-cloud-services-starters 而失败
UserInfoRestTemplateFactory setup fails with ResourceServerConfigurerAdapter and two spring-cloud-services-starters
我稍微更新了一个 Spring 云服务示例来说明我遇到的问题:
https://github.com/spring-cloud-services-samples/greeting/compare/master...timtebeek:master
经过上述更改后,我正在使用:
spring-cloud-services-starter-config-client:1.5.0.RELEASE
spring-cloud-services-starter-service-registry:1.5.0.RELEASE
spring-cloud-starter-oauth2:2.0.14.RELEASE
我还添加了一个最小的 ResourceServerConfigurerAdapter
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
@Override
public void configure(final ResourceServerSecurityConfigurer resources) {
resources.resourceId("greeter");
}
}
以及最低配置设置:
security:
oauth2:
resource:
jwt:
key-uri: https://example.com/oauth/token_key
通过这些更改,我的应用程序无法在 PCF-DEV 中部署;我没有正确尝试过 PCF,但希望结果相似。这是我收到的错误消息:
Method userInfoRestTemplateFactory in org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerTokenServicesConfiguration required a single bean, but 2 were found:
- eurekaOAuth2ResourceDetails: defined by method 'eurekaOAuth2ResourceDetails' in class path resource [io/pivotal/spring/cloud/service/eureka/EurekaOAuth2AutoConfiguration.class]
- configClientOAuth2ResourceDetails: defined by method 'configClientOAuth2ResourceDetails' in io.pivotal.spring.cloud.service.config.ConfigClientOAuth2BootstrapConfiguration
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
所以它试图使用 OAuth2ProtectedResourceDetails
与 spring-cloud-services-starters 完全分开的东西来设置我的应用程序安全性;我希望它只使用外部 JWT 密钥。
任何人都可以帮助我如何让我的 PCF 部署应用程序同时使用配置和发现服务并使用外部 JWT 令牌进行身份验证设置?
将 spring-boot-starter-parent 更改为 1.5.2.RELEASE,spring-cloud-dependencies 为 Dalston.RC1,spring-cloud-服务依赖 1.5.0.RELEASE
我运行进入同样的东西。几个月前我看到了这个线程。我还升级到 spring 引导 1.5.4 和云 Dalston.SR4,这让我度过了难关。谢谢
I was shown that http://start.spring.io 正在使用 spring 引导 1.5.9。它在 PivotalWS 上运行,所以我知道有一个解决方案。
试试这个改变:
security:
oauth2:
client:
client-id: someclient
client-secret: someclientpass
resource:
jwt:
key-uri: https://example.com/oauth/token_key
在我的案例中,client-id 和 client-secret 是虚拟值。我假设因为您也在使用 JWT 令牌,所以您的资源不需要使用 JWT 令牌提供者验证令牌,只需要签名 (key-uri)。
因此,通过添加 client-id 和 client-secret,我猜测(完全猜测)它创建了具有更好(更接近)范围的所需 OAuth2ProtectedResourceDetails。
当我们不需要查找用户信息时它正在寻找 "userInfoRestTemplateFactory" 的事实是我朝这个方向前进的原因。
通过此更改,我的服务成功部署在 PivotalWS (run.pivotal.io) 上,使用 spring boot 1.5.9 和 Dalston.SR4 io.pivotal.spring.cloud:spring-云服务依赖项:1.5.0.RELEASE
我稍微更新了一个 Spring 云服务示例来说明我遇到的问题: https://github.com/spring-cloud-services-samples/greeting/compare/master...timtebeek:master
经过上述更改后,我正在使用:
spring-cloud-services-starter-config-client:1.5.0.RELEASE
spring-cloud-services-starter-service-registry:1.5.0.RELEASE
spring-cloud-starter-oauth2:2.0.14.RELEASE
我还添加了一个最小的 ResourceServerConfigurerAdapter
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
@Override
public void configure(final ResourceServerSecurityConfigurer resources) {
resources.resourceId("greeter");
}
}
以及最低配置设置:
security:
oauth2:
resource:
jwt:
key-uri: https://example.com/oauth/token_key
通过这些更改,我的应用程序无法在 PCF-DEV 中部署;我没有正确尝试过 PCF,但希望结果相似。这是我收到的错误消息:
Method userInfoRestTemplateFactory in org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerTokenServicesConfiguration required a single bean, but 2 were found: - eurekaOAuth2ResourceDetails: defined by method 'eurekaOAuth2ResourceDetails' in class path resource [io/pivotal/spring/cloud/service/eureka/EurekaOAuth2AutoConfiguration.class] - configClientOAuth2ResourceDetails: defined by method 'configClientOAuth2ResourceDetails' in io.pivotal.spring.cloud.service.config.ConfigClientOAuth2BootstrapConfiguration Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
所以它试图使用 OAuth2ProtectedResourceDetails
与 spring-cloud-services-starters 完全分开的东西来设置我的应用程序安全性;我希望它只使用外部 JWT 密钥。
任何人都可以帮助我如何让我的 PCF 部署应用程序同时使用配置和发现服务并使用外部 JWT 令牌进行身份验证设置?
将 spring-boot-starter-parent 更改为 1.5.2.RELEASE,spring-cloud-dependencies 为 Dalston.RC1,spring-cloud-服务依赖 1.5.0.RELEASE
我运行进入同样的东西。几个月前我看到了这个线程。我还升级到 spring 引导 1.5.4 和云 Dalston.SR4,这让我度过了难关。谢谢
I was shown that http://start.spring.io 正在使用 spring 引导 1.5.9。它在 PivotalWS 上运行,所以我知道有一个解决方案。
试试这个改变:
security:
oauth2:
client:
client-id: someclient
client-secret: someclientpass
resource:
jwt:
key-uri: https://example.com/oauth/token_key
在我的案例中,client-id 和 client-secret 是虚拟值。我假设因为您也在使用 JWT 令牌,所以您的资源不需要使用 JWT 令牌提供者验证令牌,只需要签名 (key-uri)。
因此,通过添加 client-id 和 client-secret,我猜测(完全猜测)它创建了具有更好(更接近)范围的所需 OAuth2ProtectedResourceDetails。
当我们不需要查找用户信息时它正在寻找 "userInfoRestTemplateFactory" 的事实是我朝这个方向前进的原因。
通过此更改,我的服务成功部署在 PivotalWS (run.pivotal.io) 上,使用 spring boot 1.5.9 和 Dalston.SR4 io.pivotal.spring.cloud:spring-云服务依赖项:1.5.0.RELEASE