Я использую Spring Cloud Gateway с Keycloak, а аутентификация работает из браузера. Но с токеном нет заголовка Authorization
, а вместо него используется SESSION
cookie. Я вообще не хочу использовать файлы 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 настраивается с помощью основного общедоступного клиента.
@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();
}