Я использую Spring Cloud Gateway с Keycloak, и аутентификация работает из браузера. Но с токеном нет заголовка Authorization
, а вместо него SESSION
cook ie. Я вообще не хочу использовать файлы cookie, а вместо этого хочу использовать токены.
В настоящее время, если я отправлю сообщение на http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token
, чтобы получить токены, и попытаюсь поместить access_token
в Authorization
заголовок с Bearer
не работает, но возвращает страницу входа.
Также, если я добавлю keycloak.js
на страницу браузера и после успешного входа в систему попытаюсь добавить xhttp.setRequestHeader('Authorization', 'Bearer ' + keycloak.token);
к вызову Ajax, он снова вернет страницу входа.
Итак, как использовать Spring Cloud Gateway с Keycloak с любого клиента с предоставленным действующим токеном?
Вот моя конфигурация шлюза, а веб-приложение за ним с маршрутом /web/
не иметь какое-либо обеспечение. Keycloak настраивается с помощью basi c publi c client.
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http,
ReactiveClientRegistrationRepository clientRegistrationRepository) {
http.oauth2Login();
http.logout(logout -> logout
.logoutSuccessHandler(new OidcClientInitiatedServerLogoutSuccessHandler(clientRegistrationRepository)));
http.authorizeExchange().pathMatchers("/web/private").authenticated()
.pathMatchers("/web/**").permitAll()
.anyExchange().authenticated();
http.headers().frameOptions().mode(Mode.SAMEORIGIN);
http.csrf().disable();
return http.build();
}