Проблема с блокировкой ключей CORS при перенаправлении выхода из системы

#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.