在Chrome中首次调用基于HTTPS的Windows身份验证的ASP.NET Core 2.0 Web API总是失败

r7s23pms  于 2023-02-10  发布在  Go
关注(0)|答案(2)|浏览(162)

我正在开发一个应用程序与ASP.NET核心2.0 Web API后端与Windows身份验证和React前端,我遇到的第一次调用API从前端失败,没有响应(net::ERR_UNEXPECTED)。
在我看来,401挑战响应没有被浏览器正确传递或处理。
这种情况只会发生在HTTPS上使用Chrome时,使用Edge或HTTP效果很好。
第一次调用之后的后续调用都很好用,如果我手动刷新页面,一切都很正常。但一旦我关闭了所有Chrome窗口并再次访问该页面,第一次调用总是失败,并出现同样的错误。
我已经设法在一个新的ASP API应用程序中使用Windows身份验证重现了相同的行为,其中我启用了SSL,并且只在Startup中添加了以下代码行来启用Windows身份验证;

services.Configure<IISOptions>(options => options.AutomaticAuthentication = true);
services.AddAuthentication(IISDefaults.AuthenticationScheme);

当使用React前端(使用whatwg-fetch)访问API时,第一个调用失败,并显示net::ERR_UNEXPECTED。
当通过Chrome浏览器导航到API时,在页面被重定向并显示正确的响应之前,可以看到错误消息的快速 Flink 。
当通过Postman访问API时,第一次调用会导致“无法获得任何响应”的消息。当再次尝试时,它会工作。但当我关闭所有Chrome和Postman窗口并再次尝试时,第一次调用再次显示“无法获得任何响应”的消息。
我错过了什么,或者这是一些特定的行为 chrome ?
我尝试过在IIS和IIS Express中托管API,但没有区别。

f8rj6qna

f8rj6qna1#

运行此chrome.exe--禁用站点隔离试验--禁用Web安全--用户数据目录="D:\temp"
参考:Previous Post - Disable CORS in Chrome

s1ag04yj

s1ag04yj2#

因为HTTP/2不支持Windows身份验证。可以在HTTP/2响应上发送身份验证质询,但客户端必须在进行身份验证之前降级到HTTP/1.1请参阅以下参考:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-7.0&tabs=visual-studio
使用以下链接禁用HTTP/2
https://help.goacoustic.com/hc/en-us/articles/360052067413-Disable-HTTP-2-in-IIS-10

相关问题