Ошибка установки UserInfoRestTemplateFactory с ResourceServerConfigurerAdapter и двумя стартерами весенних облачных сервисов

Я немного обновил пример Spring Cloud Services, чтобы проиллюстрировать мою проблему: 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-startters для настройки безопасности моего приложения; Где бы я хотел, чтобы он использовал только внешний ключ JWT.

Может ли кто-нибудь помочь мне в том, как развернуть приложение PCF, используя как службы конфигурации, так и службы обнаружения, а также использовать внешний токен JWT для настройки аутентификации?


person Tim    schedule 04.10.2017    source источник


Ответы (2)


Я столкнулся с тем же самым. Я видел эту ветку несколько месяцев назад. Я также обновился до весенней загрузки 1.5.4 и облачного Dalston.SR4, и это помогло мне справиться с трудностями. Спасибо.

мне показали, что http://start.spring.io использовала весеннюю загрузку 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-cloud-services-dependencies:1.5.0.RELEASE

person DaShaun    schedule 19.01.2018

измените spring-boot-starter-parent на 1.5.2.RELEASE, spring-cloud-dependencies на Dalston.RC1, spring-cloud-services-dependencies 1.5.0.RELEASE

person ashraf revo    schedule 06.10.2017
comment
На самом деле, достаточно изменить только родительский элемент обратно на 1.5.4; Dalston.SR4 работает нормально. Большое спасибо! - person Tim; 09.10.2017
comment
Или, если вам так хочется: op.spring.platform:platform-bom:Brussels-SR3 как родитель. - person Tim; 09.10.2017
comment
основная команда изучает это для новых версий spring-boot-starter-parent. Как только они появятся, я отвечу на этот вопрос с соответствующими подробностями. - person Tim; 09.10.2017