Я использую Spring OAuth2RestTemplate
для доступа к службе REST.
Мне нужно изменить мой код, используйте Eureka для обнаружения сервисов.
Все сообщения должны быть HTTPS
, и у меня есть truststore
на стороне клиента, который содержит сертификаты для проверки сертификатов сервера службы REST, OAuth Server
и Eureka server
. Я НЕ пользуюсь JDK truststore
.
Для службы REST и доступа к серверу OAuth
мне удалось предоставить ClientHttpRequestFactory
, который обрабатывает SSL
и использует сертификаты из моей локальной truststore
для проверки certchain
следующим образом:
@Bean
public ClientHttpRequestFactory requestFactory(final KeyStore trustStore)
throws NoSuchAlgorithmException, KeyStoreException,
KeyManagementException {
SSLConnectionSocketFactory socketFactory
= new SSLConnectionSocketFactory(
SSLContexts.custom().loadTrustMaterial(
trustStore,
(x509Certificates, s) -> false).build(),
NoopHostnameVerifier.INSTANCE);
HttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
return new HttpComponentsClientHttpRequestFactory(httpClient);
}
@LoadBalanced
@Bean
public OAuth2RestTemplate oauth2RestTemplate(
final ClientHttpRequestFactory requestFactory) {
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setAccessTokenUri(env.getProperty(ACCESS_TOKEN_URI_PROPERTY));
resourceDetails.setClientId(env.getProperty(CLIENT_ID_PROPERTY));
resourceDetails.setClientSecret(env.getProperty(CLIENT_SECRET_PROPERTY));
resourceDetails.setGrantType(env.getProperty(CLIENT_GRANTTYPE_PROPERTY));
OAuth2RestTemplate result = new OAuth2RestTemplate(resourceDetails);
result.setRequestFactory(requestFactory);
ClientCredentialsAccessTokenProvider accessTokenProvider = new ClientCredentialsAccessTokenProvider();
accessTokenProvider.setRequestFactory(requestFactory);
result.setAccessTokenProvider(accessTokenProvider);
return result;
}
Моя конфигурация аннотирована @EnableDiscoveryClient, поэтому, когда я @Autowire OAuth2RestTemplate где-то в моем коде, я могу использовать eureka-имя службы.
К сожалению, поиск службы Eureka
завершился неудачно - заявив, что путь сертификации не может быть проверен.
Может кто-нибудь сказать мне, как, например, настроить пружину @Configuration @Bean
, которая впрыскивает мой ClientRequestHttpFactory
в jersey client
, используемый spring eureka client
?
Мне не разрешено помещать цепочку сертификатов в JDK/JRE
значение по умолчанию truststore
.