如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前

Posted

技术标签:

【中文标题】如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前【英文标题】:NodeJs Passport performs CORS pre-flight if request comes from VueJS 【发布时间】:2018-05-19 15:28:44 【问题描述】:

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

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

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

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

我比较了来自 API 调用和 VueJ 的请求标头,但我找不到任何会导致预检的标头。

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

版本:

节点:8.9.0 快递:4.16.2 护照:^0.4.0 护照-saml:^0.31.0 Vue:^2.4.4 Axios:^0.17.1

【问题讨论】:

【参考方案1】:

我发现这是由于时间问题造成的。

它使用以下逻辑:

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

【讨论】:

以上是关于如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前的主要内容,如果未能解决你的问题,请参考以下文章

通过Vuejs调用时如何使Nodejs重定向工作

为啥来自 Vuejs 的 Laravel 8 的 AJAX POST 请求会引发 405(不支持的方法)错误?

与Vuejs SPA + Nodejs API的CORS问题

Vuejs SPA + Nodejs API 的 CORS 问题

来自python的请求从nodejs得到不同的响应

为啥 NodeJS 中来自 Angular 的 GET 请求有时为空,尽管有数据