OAuth 中的 CORS:对预检请求的响应未通过访问控制检查
CORS in OAuth: Response to preflight request doesn't pass access control check
所以我正在尝试实施 OAuth 2 流程,而我的 Web 应用程序是提供授权 code/access 令牌的服务器。
将代码发送回 third-party 网站(在本例中为 zapier)时发生 Cors 错误:
XMLHttpRequest cannot load https://zapier.com/dashboard/auth/oauth/return/App505CLIAPI/?code=somecode&state=somestate. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://myurl' is therefore not allowed access.
如果我手动打开一个新标签,粘贴那个 zapier uri,一切都会完美。
似乎是典型的 CORS 问题,但 none 流行的解决方案对我有用:
- 添加
Access-Control-Allow-Origin
:我正在使用这个oauth2orize
库,并向预检发送响应似乎也是
图书馆。所以我不能添加 header.
- 使用 cors:已尝试
app.use(cors())
和 app.options('*',
cors())
,它们应该适用于所有路由,但根本不起作用。
我的 webapp 位于一个 node express 服务器上,在它前面有一个 nginx 代理服务器。
如果您知道问题出在哪里,我们将不胜感激。
错误消息指出的问题不是由 https://myurl/
的应用程序代码 运行 引起的。相反,只是 https://zapier.com/dashboard/auth/…
似乎不支持 CORS。
具体来说,https://zapier.com/dashboard/auth/…
URL 的响应不包括 Access-Control-Allow-Origin
响应 header,因此您的浏览器不会让您的前端 JavaScript代码访问响应。
这似乎是 Zapier 有意为之——他们不打算从浏览器中的前端 AJAX/XHR/Fetch 代码 运行 访问该身份验证端点。相反,我猜它的目的是让您只能从后端代码访问该身份验证端点。或者什么的。
无论如何,您无法解决 Zapier API 端点的响应不包括 Access-Control-Allow-Origin
.
的事实
并且只要它不包含 Access-Control-Allow-Origin
,您的浏览器就会阻止您的前端代码获取响应——并且没有办法让您的浏览器以其他方式运行,只要您的前端代码正试图直接访问 API 端点。
所以唯一的解决办法是不要直接从你的前端代码点击那个 API 端点,而是设置一个代理并更改你的前端代码以通过它发出请求,或者只是处理它如上所述,以其他方式在您现有的后端代码中。
Why does my JavaScript code receive a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error, while Postman does not? 的答案提供了一些关于如何设置特殊 CORS 代理的详细信息,如果您想走那条路的话。
所以我正在尝试实施 OAuth 2 流程,而我的 Web 应用程序是提供授权 code/access 令牌的服务器。
将代码发送回 third-party 网站(在本例中为 zapier)时发生 Cors 错误:
XMLHttpRequest cannot load https://zapier.com/dashboard/auth/oauth/return/App505CLIAPI/?code=somecode&state=somestate. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://myurl' is therefore not allowed access.
如果我手动打开一个新标签,粘贴那个 zapier uri,一切都会完美。
似乎是典型的 CORS 问题,但 none 流行的解决方案对我有用:
- 添加
Access-Control-Allow-Origin
:我正在使用这个oauth2orize 库,并向预检发送响应似乎也是 图书馆。所以我不能添加 header. - 使用 cors:已尝试
app.use(cors())
和app.options('*', cors())
,它们应该适用于所有路由,但根本不起作用。
我的 webapp 位于一个 node express 服务器上,在它前面有一个 nginx 代理服务器。
如果您知道问题出在哪里,我们将不胜感激。
错误消息指出的问题不是由 https://myurl/
的应用程序代码 运行 引起的。相反,只是 https://zapier.com/dashboard/auth/…
似乎不支持 CORS。
具体来说,https://zapier.com/dashboard/auth/…
URL 的响应不包括 Access-Control-Allow-Origin
响应 header,因此您的浏览器不会让您的前端 JavaScript代码访问响应。
这似乎是 Zapier 有意为之——他们不打算从浏览器中的前端 AJAX/XHR/Fetch 代码 运行 访问该身份验证端点。相反,我猜它的目的是让您只能从后端代码访问该身份验证端点。或者什么的。
无论如何,您无法解决 Zapier API 端点的响应不包括 Access-Control-Allow-Origin
.
并且只要它不包含 Access-Control-Allow-Origin
,您的浏览器就会阻止您的前端代码获取响应——并且没有办法让您的浏览器以其他方式运行,只要您的前端代码正试图直接访问 API 端点。
所以唯一的解决办法是不要直接从你的前端代码点击那个 API 端点,而是设置一个代理并更改你的前端代码以通过它发出请求,或者只是处理它如上所述,以其他方式在您现有的后端代码中。
Why does my JavaScript code receive a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error, while Postman does not? 的答案提供了一些关于如何设置特殊 CORS 代理的详细信息,如果您想走那条路的话。