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为我工作:
- 添加
Access-Control-Allow-Origin
:我正在使用这个oauth2orize库,并且发送reponse来进行预检似乎也是库的一部分。 所以我不能添加标题。 - 使用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代理的细节,如果你想要走这条路线的话。