OAuth中的CORS:对预检请求的响应不会通过访问控制检查

所以我试图实现OAuth 2stream,而我的web应用程序是放弃授权代码/访问令牌的服务器。

将代码发送回第三方网站(在这种情况下为zapier)时发生Cors错误:

XMLHttpRequest无法加载https://zapier.com/dashboard/auth/oauth/return/App505CLIAPI/?code=somecode&state=somestate 。 对预检请求的响应不会通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 原因' https:// myurl '因此不被允许访问。

如果我手动打开一个新标签,粘贴该zapier uri,一切正常完美。

看起来像一个典型的CORS问题,但没有stream行的解决scheme为我工作:

  1. 添加Access-Control-Allow-Origin :我正在使用这个oauth2orize库,并且发送reponse来进行预检似乎也是库的一部分。 所以我不能添加标题。
  2. 使用cors :已经尝试app.use(cors())app.options('*', cors())应该适用于所有路线,但根本不工作。

我的web应用程序坐在一个节点快递服务器上,前面有一个nginx代理服务器。

任何想法的问题可能会被赞赏。

错误消息指出的问题不是由https://myurl/运行的应用程序代码引起的。 相反,只是https://zapier.com/dashboard/auth/… //zapier.com/dashboard/auth/…似乎不支持CORS。

具体来说,来自https://zapier.com/dashboard/auth/… URL的响应不包括Access-Control-Allow-Origin响应头,因此您的浏览器不会让您的前端JavaScript代码访问响应。

看起来Zapier一方都是故意的 – 他们不打算从浏览器中运行的前端AJAX / XHR /获取代码访问auth端点。 相反,我猜想你只能从你的后端代码访问这个auth端点。 或者其他的东西。

无论如何,从您的方面来说,您无法解决这个问题,即Zapier API端点的响应不包括Access-Control-Allow-Origin

只要它不包含Access-Control-Allow-Origin ,浏览器将继续阻止你的前端代码能够得到响应,而且只要你的前端代码不能让你的浏览器运行正试图直接击中该API端点。

所以唯一的解决scheme是不要直接从你的前端代码中直接访问这个API端点,而是要么build立一个代理并且改变你的前端代码来通过这个请求来进行请求,否则就在你现有的后端代码中以其他方式处理它, 正如刚才提到的。

在“No”Access-Control-Allow-Origin头部出现在请求的资源上的答案“提供了一些关于如何设置特殊的CORS代理的细节,如果你想要走这条路线的话。