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

Posted

技术标签:

【中文标题】在 HTTPS 上使用 Windows 身份验证首次调用 ASP.NET Core 2.0 Web API 在 Chrome 中总是失败【英文标题】:First call to ASP.NET Core 2.0 Web API with Windows authentication on HTTPS always fails in Chrome 【发布时间】:2017-10-04 09:39:18 【问题描述】:

我正在使用带有 Windows 身份验证和 React 前端的 ASP.NET Core 2.0 Web Api 后端开发应用程序,我遇到从前端对 API 的第一次调用失败且没有响应 (net::ERR_UNEXPECTED)。

在我看来,401 质询响应没有被浏览器正确传递或处理。

只有在 HTTPS 上使用 Chrome 时才会发生这种情况。使用 Edge 或 HTTP 可以正常工作。

第一个调用之后的后续调用工作正常,如果我手动刷新页面,一切正常。但是一旦我关闭了所有 Chrome 窗口并再次访问该页面,第一次调用总是失败并出现同样的错误。

我已经成功地在带有 Windows 身份验证的全新 ASP.NET Core Web Api 应用程序中重现了相同的行为,其中我启用了 SSL,并且仅在 Startup 中添加了以下行以启用 Windows 身份验证;

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

使用 React 前端(使用 whatwg-fetch)访问 api 时,第一次调用失败并显示 net::ERR_UNEXPECTED。

当通过 Chrome 导航到 api 时,在页面被重定向并显示正确响应之前,可以看到快速闪现的错误消息。

通过 Postman 访问 api 时,第一次调用会导致“Could not get any response”消息。再次尝试时,它可以工作。但是当我关闭所有 Chrome 和 Postman 窗口并重试时,第一次调用再次显示“无法获得任何响应”消息。

我是否遗漏了什么,或者这是 Chrome 的某些特定行为?

我尝试在 IIS 和 IIS Express 中托管 API,但没有区别。

【问题讨论】:

【参考方案1】:

运行这个 chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"

参考:Previous Post - Disable CORS in Chrome

【讨论】:

以上是关于在 HTTPS 上使用 Windows 身份验证首次调用 ASP.NET Core 2.0 Web API 在 Chrome 中总是失败的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上配置 Git 以使用 NTLM 代理身份验证

Windows Phone 8.0 上的 HTTPS WCF 服务:无法进行身份验证

如何在 Windows 上删除 git bash ssh 身份验证

无法通过 Git for Windows 使用/调试 SSH 身份验证

在 Internet Explorer 上使用 Windows 身份验证通过 SSL 进行跨域 ajax 调用失败

我可以将 html5 Websockets 与 Windows 域身份验证一起使用吗?