Я пытаюсь создать приложение REST Spring Boot, которое должно выполнить удаленный вызов REST другому приложению Spring Boot, защищенному OAuth2 (с типом предоставления client_credentials).
Первое приложение использует Reactive WebClient для вызова второго приложения OAuth2 REST.
Я настроил WebClient с помощью grant_type "client_credentials" (см. Код ниже)
public WebClient messageWebClient(
ClientRegistrationRepository clientRegistrations,
OAuth2AuthorizedClientRepository authorizedClients,
ClientHttpConnector clientHttpConnector
) {
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
oauth.setDefaultClientRegistrationId("message");
return WebClient.builder()
.baseUrl(MESSAGE_BASE_URL)
.clientConnector(clientHttpConnector)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.filter(oauth)
.filter(logRequest())
.build();
}
@Bean
public ClientRegistrationRepository clientRegistrations() {
ClientRegistration clientRegistration = ClientRegistration
.withRegistrationId("message")
.clientId("client")
.clientSecret("secret")
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.tokenUri("http://localhost:8081/oauth/token")
.build();
return new InMemoryClientRegistrationRepository(clientRegistration);
}
Но каждый раз, когда я звоню почтальону первому приложению, я получаю следующее исключение:
"IllegalArgumentException: недопустимый тип разрешения авторизации (client_credentials) для регистрации клиента с идентификатором: ..." из DefaultOAuth2AuthorizationRequestResolver
Действительно ли "client_credentials" поддерживается для WebClient ... или я что-то упустил?
Привет