gpt4 book ai didi

angular - ASP.NET核心: Windows Authentication with OPTIONS exception (CORS preflight)

转载 作者:行者123 更新时间:2023-12-03 08:45:58 24 4
gpt4 key购买 nike

我正在开发一个单页 Web 应用程序。它具有 ASP.NET Core 3 后端和 Angular 9 前端。我在 Visual Studio 中的 IIS Express 上运行后端,地址为 http://localhost:59280 。前端在 Visual Studio Code 中运行,使用 ngserve,位于 http://localhost:4200 。之前我不需要在后端开启 CORS,因为我只在 Chrome 中测试了该应用,添加 --disable-web-security 命令行参数就足以开启脱离同源政策。在正式服务器上不需要CORS,上述跨域情况仅发生在我的开发机器上。

现在我想在 Firefox 中调试前端,但由于无法关闭 Firefox 的同源策略,所以我必须在后端打开 CORS。不幸的是,它不起作用,因为我使用 Windows 身份验证,并且它会停止默认未经身份验证的 CORS preflight request 。如果我可以让 HTTP OPTIONS 请求在没有 Windows 身份验证的情况下进行处理,那么这个问题就可以解决。我认为这可以通过向 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 身份验证?

最佳答案

1) 上述 web.config 设置有效,我只需解锁 .vs 目录中 applicationhost.config 中的“anonymousAuthentication”部分:<section name="anonymousAuthentication" overrideModeDefault="Allow" /> 。 launchSettings.json 中“anonymousAuthentication”参数的值并不重要。

2) 按照 @MartinStaufcik 的建议,我在 StartUp.Configure() 的开头添加了一个中间件,它响应预检请求 ( MDN ):

app.Use(async (context, next) => {
if (context.Request.Method == "OPTIONS") {
context.Response.StatusCode = 204;
context.Response.Headers.Add("Access-Control-Allow-Origin", context.Request.Headers["Origin"]);
context.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
context.Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
return;
}
await next();
});

3) 我还必须添加 { withCredentials: true } Angular 9 前端中 HttpClient.post() 的参数。如果没有这个,OPTIONS 请求会得到 204,但后续的 POST 会得到 401。

关于angular - ASP.NET核心: Windows Authentication with OPTIONS exception (CORS preflight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com