node.js - 重定向到登录时出现 Keycloak CORS 问题

标签 node.js express cors keycloak

我正在尝试获取 nodeJS keycloak adapter使用我的 Express 应用程序,但当它尝试重定向到我使用 keycloak 中间件保护的路由的登录页面时,我遇到了 CORS 问题:

XMLHttpRequest cannot load 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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5001' is therefore not allowed access.

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

我还使用 node cors 库在我的 node express 应用程序上启用了 cors,遵循此 express 指南 here

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 origins 配置部分添加“*”条目一样简单,但事实并非如此我。

谢谢

最佳答案

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

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

更深入的流程是:

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

关于node.js - 重定向到登录时出现 Keycloak CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220566/

相关文章:

session - 没有 cookie 的 Node.JS session

javascript - CORS 允许一些 GET 请求,但不允许 Facebook 登录请求

node.js - React - 服务器端组件渲染

javascript - 在另一个 jade 文件中访问从 Jade 文件传递​​的变量

javascript - 如何在远程服务器(ubuntu)上的node.js中安装并连接到mongodb?

Laravel CORS 中间件因 post 和资源请求失败

c# - Access-Control-Allow-Headers 不允许请求 header 字段 x-user-session

javascript - 忽略提取中的自签名 SSL 证书

node.js - 当文档更新时,MongooseJS 会弄乱预导入的数据

javascript - forEach 中的 If/Else 仅添加段落而不添加标题,但在本地它正在工作(React 和 Editor.js)