Как аутентифицировать вызов curl (или Postman, или Ajax) с помощью Spring Cloud Gateway и Keycloak - PullRequest
2 голосов
/ 27 мая 2020

Я использую 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();
    }
...