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

新手上路,请多包涵

我正在尝试让 nodeJS keycloak 适配器 与我的 Express 应用程序一起使用,但是当它尝试重定向到我使用 keycloak 中间件保护的路由的登录页面时遇到了 CORS 问题:

XMLHttpRequest 无法加载 http://192.168.132.44:8080/auth/realms/Actora/protocol/openid-connect/auth?client_id=actora-test&state=0e9c9778-c41b-4aa8-8052-d0f0125045ac&redirect_uri=http%3A%2F%2Flocalhost %3A5001%2Fauth%2Fchecktoken%3Fauth_callback%3D1&scope=openid&response_type=code 。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:5001 ”。

在我的 keycloak 客户端设置中,我在 Web Origins 配置部分添加了一个“*”值。

我还使用 node cors 库在我的 node express 应用程序上启用了 cors,遵循 这里 的快速指南

var cors =  require('cors'),
  app = express();

app.use(cors());
app.options('*', cors()); //enable for all pre-flight requests

我使用 3.2.1 版本的 keycloak 以防万一(我看到一个新版本作为 RC 发布)

有没有人遇到过类似的问题并设法解决?我一直在研究许多 JBOSS 邮件列表线程和其他 stackoverflows,并且似乎都暗示它就像在 keycloak 管理站点上为客户端的 web 起源配置部分添加“*”条目一样简单,但情况并非如此我。

谢谢

原文由 mindparse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 649
1 个回答

我也在用 mindparse 解决这个问题。

我认为这里的关键问题是 keycloak 服务器没有响应任何 ACCESS-CONTROL-ALLOW-ORIGIN 标头,尽管他已经在 keycloak 管理门户中正确配置了“web Origins”设置。

该过程的更深入流程是:

  1. 用户尝试调用 node express 服务器上的 keycloak 安全路由
  2. Keycloak 中间件检测到用户未通过身份验证,并使用 302(重定向)响应请求到由 keycloak 服务器托管的自定义登录页面。
  3. 浏览器向keycloak服务器发送OPTIONS请求,检查是否因为是跨源请求。
  4. keycloak 服务器的响应不包含 ACCESS-CONTROL-ALLOW-ORIGIN 标头来告诉浏览器它有权发出此请求。
  5. 浏览器然后读取此响应,因此不会发出后续请求,因为它没有通过访问控制允许来源检查

原文由 Andy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题