如果请求来自 VueJS,NodeJs Passport 执行 CORS pre-flight

NodeJs Passport performs CORS pre-flight if request comes from VueJS

我正在编写一个使用 Passport 和 Saml-Stategy 的 NodeJS/Express 后端。我正在使用外部身份提供者和 VueJs 作为前端。

如果我从浏览器 (Chrome + IE) 向后端发出 API 请求,一切正常。请求转到后端,作为 GET 请求转到 IdP,然后返回经过身份验证。

但是如果我加载执行相同请求的 VueJs 应用程序,passport 会发出 CORS pre-flight (OPTIONS) 请求,该请求从 IdP 返回为 404,因为不支持 OPTIONS。我试了 Vue-Resource 和 Axios,都是一样的结果。

很遗憾,我无法更改 IdP 上的任何设置。但为什么我的护照在后端对请求的处理方式不同?有任何想法吗?

我比较了来自 API 调用和 VueJs 的请求 headers,但我找不到任何会导致 pre-flight.

的 headers

存储库:https://github.com/tmschbgr/NodePassportExample

版本:

我发现这是由于时间问题引起的。

它按照以下逻辑工作:

  1. 请求到达后端,检查是否通过身份验证
  2. 如果没有,请转到 IdP 并返回。如果成功重定向到 /
  3. 在身份验证检查后提供静态文件。这样,只有在用户通过身份验证后,应用程序才会得到服务。