【发布时间】:2020-08-11 23:23:39
【问题描述】:
我正在开发一个单页 Web 应用程序。它有 ASP.NET Core 3 后端和 Angular 9 前端。我在 IIS Express 上的 Visual Studio 中运行后端 http://localhost:59280。前端在 Visual Studio Code 中运行,使用 ng serve,http://localhost:4200。之前我不需要在后端开启 CORS,因为我只在 Chrome 中测试了应用程序,添加--disable-web-security 命令行参数就足以关闭同源策略。在live server上不需要CORS,上面的跨域情况只发生在我的dev机器上。
现在我想在 Firefox 中调试前端,但由于无法关闭 Firefox 的同源策略,我必须在后端打开 CORS。不幸的是,它不起作用,因为我使用 Windows 身份验证,它会停止默认未经身份验证的CORS preflight request。如果我可以在没有 Windows 身份验证的情况下处理 HTTP OPTIONS 请求,这可以解决。我认为这可以通过向 web.config 添加类似的内容来完成:
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
</authentication>
<authorization>
<add accessType="Allow" verbs="OPTIONS" users="*" />
</authorization>
</security>
</system.webServer>
...但是我收到一条错误消息:“此配置部分不能在此路径中使用。当该部分被锁定在父级别时会发生这种情况。”显然 web.config 与 launchSettings.json 冲突,当后端在 Visual Studio 的 IIS Express 上运行时,它似乎控制身份验证,使用这两行:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
...
我不知道如何仅使用 launchSettings.json 为 HTTP OPTIONS 请求单独关闭 Windows 身份验证。
有没有办法在 ASP.NET Core 3 应用程序中为 HTTP OPTIONS 请求单独关闭 Windows 身份验证?
【问题讨论】:
-
您可以尝试将 app.UserCors 放在 app.UseAuthentication 之前,并添加一个中间件,在出现选项时立即返回:stackoverflow.com/a/31754050/1882699
-
UserCors 来对地方了。我尝试了中间件的想法,现在 OPTIONS 请求返回 200 OK,而不是 401 Unauthorized。但这没有帮助,因为 POST 不是在 OPTIONS 之后发送的...
-
嗯...如果我返回 204 No Content 和上面 MDN 页面中列出的标题(Access-Control-Allow-Methods: POST 等)然后发送 POST,但得到 401 Unauthorized .至少这是真正的进步,谢谢!
标签: angular asp.net-core cors same-origin-policy preflight