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

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

person Vuk Djapic    schedule 27.05.2020    source источник


Ответы (1)


Если вы хотите делать запросы к Spring Gateway с токеном доступа, вам необходимо сделать его сервером ресурсов: https://stackoverflow.com/a/66923312/11122338

person Dmitri Ciornii    schedule 04.04.2021