#spring-boot #keycloak #spring-security-oauth2
#весенняя загрузка #keycloak #spring-security-oauth2
Вопрос:
Я использую Keycloak 10.0.2 для защиты API spring boot REST и Angular 9 для интерфейса. Внешний интерфейс обслуживается из микросервиса spring boot, работающего на http://localhost:8080 . На стороне скрытого доступа веб-источник клиента OpenID-connect настроен так, чтобы разрешать все источники.
Spring boot spring security настроен на использование Keycloak в качестве поставщика клиента oauth2.
spring:
security:
oauth2:
client:
provider:
keycloak:
issuer-uri: https://abc-keycloak.abccloud.com/auth/realms/abc
scope: openid, profile
registration:
keycloak:
client-id: localhost
client-secret: xxxxx
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
resourceserver:
jwt:
issuer-uri: https://abc-keycloak.abccloud.com/auth/realms/abc
Интерфейс Angular выполняет вызов API для выхода из системы http://localhost:8080/logout
и перенаправляется на
HTTP/1.1 302 Found Location:
https://abc-keycloak.abccloud.com/auth/realms/abc/protocol/openid-connect/logout?id_token_hint=xxxxxx
Я получаю ошибку CORS в браузере Google Chrome
Доступ к XMLHttpRequest по адресу ‘https://abc-keycloak.abccloud.com/auth/realms/abc/protocol/openid-connect/logout?id_token_hint=xxxxxxamp;post_logout_redirect_uri=http://localhost:8080 ‘ (перенаправлено с ‘http://localhost:8080/logout ‘) из источника’http://localhost:8080 ‘ заблокирован политикой CORS: ответ на предполетный запрос не проходит проверку контроля доступа: заголовок ‘Access-Control-Allow-Origin’ отсутствует на запрошенном ресурсе.
Ответ №1:
Это не должен быть вызов API (запрос в фоновом режиме). Весь браузер должен быть перенаправлен на этот URL-адрес выхода из приложения (а затем на URL-адрес выхода из Keycloak).
Комментарии:
1. Переход к URL-адресу выхода из системы keycloak также должен выполняться интерфейсом? Что, если интерфейс является сторонним, и я не могу его контролировать?
2. Принудительное перенаправление не имеет смысла. почему это нормально для token_endpoint, но KO для end_session one?
3. @Toilal это просто, вам нужно удалить файлы cookie в домене IDP — завершить сеанс единого входа в браузере. Конечная точка токена — это просто конечная точка API, поэтому ей не нужно обрабатывать какие-либо файлы cookie.