Как настроить приложение Spring для выполнения реактивной аутентификации клиента для приложения, которое использует обмеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как настроить приложение Spring для выполнения реактивной аутентификации клиента для приложения, которое использует обме

Сообщение Anonymous »

У меня есть приложение, которое использует обмен токенами KeyCloak.
Короче говоря, оно запрашивает область, затем запрашивает токен, используя учетные данные клиента (client_id, client_secret), затем запрашивает новый токен ( grant_type:token-exchange).
И у меня есть приложение Spring, которое пытается пройти аутентификацию в приложении, использующем KeyCloak. Я пытаюсь использовать Spring Security, но я очень новичок в этом, и Token Exchange, похоже, также является новым механизмом аутентификации.
До сих пор я пробовал в своем приложении следующее. yml:

Код: Выделить всё

spring:
main:
web-application-type: reactive
security:
oauth2:
client:
registration:
myClient:
client-id: ${CLIENT_ID}
client-secret: ${CLIENT_SECRET}
client-authentication-method: client_secret_post
authorization-grant-type: urn:ietf:params:oauth:grant-type:token-exchange
provider:
myClient:
token-uri: ${TOKEN_URI}
и я попробовал следующее:

Код: Выделить всё

@Bean
public WebClient buildOAuthWebClient(HttpClient httpClient,
ExchangeStrategies strategies,
ReactiveOAuth2AuthorizedClientManager authorizedClientManager) {
LOGGER.info("Using OAuth mode");
ServerOAuth2AuthorizedClientExchangeFilterFunction oath2ClientFilter =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
oath2ClientFilter.setDefaultClientRegistrationId("myClient");

return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.exchangeStrategies(strategies)
.filter(oath2ClientFilter)
.build();
}

@Bean
public ReactiveOAuth2AuthorizedClientManager authorizedClientManager(ReactiveClientRegistrationRepository clientRegistrationRepository,
ServerOAuth2AuthorizedClientRepository authorizedClientRepository) {

TokenExchangeReactiveOAuth2AuthorizedClientProvider tokenExchangeAuthorizedClientProvider =
new TokenExchangeReactiveOAuth2AuthorizedClientProvider();

ReactiveOAuth2AuthorizedClientProvider authorizedClientProvider =
ReactiveOAuth2AuthorizedClientProviderBuilder.builder()
.provider(tokenExchangeAuthorizedClientProvider)
.clientCredentials()
.refreshToken()
.build();

DefaultReactiveOAuth2AuthorizedClientManager authorizedClientManager =
new DefaultReactiveOAuth2AuthorizedClientManager(
clientRegistrationRepository, authorizedClientRepository);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);

return authorizedClientManager;
}

@Bean
public SecurityWebFilterChain securityFilterChain(ServerHttpSecurity http) {
http.csrf(ServerHttpSecurity.CsrfSpec::disable).oauth2Client(Customizer.withDefaults());
return http.build();
}
Я действительно не совсем понимаю, где я ошибаюсь и как вообще проверить, добавляется ли аутентификация в мой запрос. Любые советы будут оценены.

Подробнее здесь: https://stackoverflow.com/questions/789 ... entication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»