Node.js 重定向到登录时出现KeyClope CORS问题

Node.js 重定向到登录时出现KeyClope CORS问题,node.js,express,cors,keycloak,Node.js,Express,Cors,Keycloak,我正在尝试让我的Express应用程序正常工作,但当它尝试重定向到我使用KeyClope中间件保护的路由的登录页面时,我遇到了CORS问题: 无法加载XMLHttpRequest . 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入 在我的KeyClope客户端设置中,我向Web源配置部分添加了单个值“*” 我还使用node cors库在我的node express应用程序上启用了co

我正在尝试让我的Express应用程序正常工作,但当它尝试重定向到我使用KeyClope中间件保护的路由的登录页面时,我遇到了CORS问题:

无法加载XMLHttpRequest . 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入

在我的KeyClope客户端设置中,我向Web源配置部分添加了单个值“*”

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

我使用KeyClope的3.2.1版,以防有任何不同(我看到一个新版本作为RC发布)

有没有人遇到过类似的问题并设法解决?我一直在挖掘许多JBOSS邮件列表线程和其他堆栈溢出,所有这些似乎都表明它很简单,只需在KeyClope管理站点上为客户机的web源配置部分添加“*”项,但我不是这样


谢谢

我也在与mindparse一起解决这个问题

我认为这里的关键问题是,尽管keydrope服务器在keydrope管理门户中正确配置了“web源”设置,但它没有使用任何ACCESS-CONTROL-ALLOW-ORIGIN头响应

更深入的流程是:

  • 用户尝试在node express服务器上调用KeyClope安全路由
  • KeyClope中间件检测到用户未经过身份验证,并且 通过302(重定向)到托管的自定义登录页面响应请求 通过KeyClope服务器
  • 浏览器向KeyClope服务器发送一个选项请求,以检查它是否正确 因为这是一个跨源请求
  • KeyClope服务器响应不包括ACCESS-CONTROL-ALLOW- ORIGIN标头,告诉浏览器它有权进行此操作 请求
  • 然后浏览器读取此响应,因此不会执行以下操作 up请求,因为它未通过访问控制允许原点检查

  • 我也有同样的问题。我正在使用KeyClope 6.0.1

    在我的例子中,我必须在Java后端服务器的
    keydape.json
    中添加
    “enable cors”:true

    之后,我遇到了另一个问题:
    401未经授权

    解决了这个问题

    只需将你的应用程序的url像“”一样放在KeyClope客户端设置的“Web源”字段中。

    http://192.168.132.44:8080/auth/realms/Actora/protocol/openid-connect/auth
    端点不由节点应用程序提供服务,对吗?而是由运行JBOSS的另一台服务器提供服务?正确,那么这是否意味着另一台服务器需要某种形式的CORS启用,我们的KeyClope正在运行的JBOSS?不,这不应该是必需的,您能否提供更多关于您的NodeJS应用程序的详细信息,您如何为前端提供服务?或者是一个单独的网络应用程序?您是否仅使用Bear?是的,您必须启用运行KeyClope的JBOSS服务器。(启用为前端客户端代码提供服务的节点后端CORS是不相关的,因为该服务器不是您的前端代码向其发送跨源请求的服务器。)我们的节点和web应用位于同一个项目文件夹中,我们的express应用从构建目录为我们的web应用(angularJS)提供服务。我们不仅仅使用承载,我们使用凭证作为访问类型。您能详细说明步骤1吗?我怀疑您执行的是XMLHttpRequest,这对重定向毫无意义。重定向只有在浏览器直接执行(而不是通过ajax调用)时才有意义。请参阅我之前对OP的评论,了解解决此问题的好方法。这是正确的。我们有一个angular应用程序,当导航到任何angular状态时,它会调用以检查用户是否登录。这意味着,当用户在浏览器中导航到网站时,它将立即调用express服务器中的checktoken方法。但是从您所说的来看,似乎不可能以我们尝试的方式/流程来保护api资源?你必须首先保护客户端,然后使用客户端的令牌访问服务?我想我遇到了同样的问题,解决这个问题的正确流程是什么?有什么想法吗?@Balkrishna,我也面临同样的问题,但由于我之前错过了一些信件,因此通过替换秘密解决了问题
    var cors =  require('cors'),
      app = express();
    
    app.use(cors());
    app.options('*', cors()); //enable for all pre-flight requests