注销重定向时出现 Keycloak CORS 问题

Posted

技术标签:

【中文标题】注销重定向时出现 Keycloak CORS 问题【英文标题】:Keycloak CORS issue on logout redirect 【发布时间】:2021-02-19 02:46:54 【问题描述】:

我正在使用 Keycloak 10.0.2 来保护 Spring Boot REST API 和 Angular 9 的前端。 前端由运行在 http://localhost:8080 上的 Spring Boot 微服务提供服务。 在 keycloak 端,openid-connect 客户端 Web 源配置为允许所有源。 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
 

我在 Google Chrome 浏览器中收到 CORS 错误

访问 XMLHttpRequest 在 'https://abc-keycloak.abccloud.com/auth/realms/abc/protocol/openid-connect/logout?id_token_hint=xxxxxx&post_logout_redirect_uri=http://localhost:8080' (重定向自 'http://localhost:8080/logout') “http://localhost:8080”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

【问题讨论】:

【参考方案1】:

它不应该是 API 调用(后台请求)。整个浏览器应该导航到该应用程序注销 URL(然后到 Keycloak 注销 URL)。

【讨论】:

keycloak注销url的导航也应该由前端完成吧?如果前端是第 3 方,我无法控制它怎么办? 强制重定向没有意义。为什么在 token_endpoint 上没问题,但在 end_session 一上 KO? @Toilal 很简单,您需要删除 IDP 域上的 cookie - 在浏览器中终止 SSO 会话。 Token 端点只是 API 端点,所以它不需要处理任何 cookie。

以上是关于注销重定向时出现 Keycloak CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

重定向到登录时的 Keycloak CORS 问题

尝试从部分视图重定向用户时出现CORS错误

与登录重定向相关的 Keycloak CORS 问题

如果 keycloak 会话过期,我如何重定向到登录页面?

从 keycloak 刷新访问令牌时出现 CORS 错误

尝试使用 next-connect 在 Next.js 中从 http://localhost:3000 重定向到 https://api.twitter.com 时出现 CORS 错误?