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



因此,我正在尝试实现OAuth 2 Flow,而我的WebApp是提供授权代码/访问令牌的服务器。

将代码发送回第三方网站(在这种情况下为Zapier(时,CORS错误发生了:

xmlhttprequest不能加载https://zapier.com/dashboard/auth/oauth/oauth/return/app505cliapi/?code=Somecode&amp@astate = somestate。对飞行前请求的响应不会传递访问控制检查:在请求的资源上没有"访问控制"标头。因此,不允许访问原点" https://myurl"。

如果我手动打开一个新选项卡,粘贴Zapier Uri,一切都很好。

似乎是一个典型的CORS问题,但是流行的解决方案对我有用:

  1. 添加Access-Control-Allow-Origin:我正在使用此oauth2orize图书馆,并向前飞行发送回复似乎也是图书馆。所以我无法添加标头。
  2. 使用CORS:尝试过适用于所有路线的app.use(cors())app.options('*', cors()),但根本不工作。

我的WebApp坐在节点Express Server上,在其前面有Nginx代理服务器。

任何想法可能会在哪里受到赞赏。

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

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

Zapier似乎都是故意的 - 他们不打算从浏览器中运行的Frontend Ajax/Xhr/Fetch代码访问该验证端点。取而代之的是,我想您只想从后端代码访问该验证端点。或其他东西。

无论如何,您无法从您的身边修复Zapier API端点的响应不包括Access-Control-Allow-Origin

并且只要不包括Access-Control-Allow-Origin,您的浏览器就可以阻止您的前端代码进行响应 - 并且只要您的前端代码试图击中您的浏览器,就无法使您的浏览器表现出来该API端点直接。

因此,唯一的解决方案是不要直接从您的前端代码点击API端点,而是要设置代理并更改前端代码以通过该代码来提出请求,否则只需以其他方式处理它现有的后端代码,如上所述。

我的JavaScript代码为何收到"访问权限"资源的答案。错误,虽然邮递员没有?提供一些有关如何设置特殊CORS代理的详细信息,如果您想走那条路。

相关内容

最新更新