IE11 将 bearer token 替换为 Negotiate

IE11 replaces the bearer token with Negotiate

我们在 Angular 4 front-end 和 .NET Core 1.0 服务中有一个应用程序。 WEB API 请求来自 Angular 使用 http.request 和 JWT 不记名令牌。这是一个相对较大的应用程序,所有 HTTP 请求都通过 Angular 中的公共服务进行路由。它在所有环境中都在 Chrome 和 FF 中工作。但是当某些用户使用 IE11 时,它会在生产环境中间歇性地抛出未经授权的错误。 它在开发环境(Windows 7、64 位)、DEV 测试环境(Windows Server 2008 R2、64 位、与开发相同的域)中配置的站点的所有浏览器中工作, QA 环境(Windows Server 2008 R2,64 位,与开发相同的域),测试安装程序(Windows Server 2008 R2,64 位,与生产相同的域),模拟站点(Windows Server 2008 R2,64 位,与生产域相同)。但对于某些用户,它会在 IE11 中的 pre-production 和生产(Windows Server 2008 R2,64 位)中引发间歇性错误。 Front-end 站点配置为匿名和 windows 身份验证。 Web 服务配置为匿名使用不记名令牌。 Web API 启动具有如下授权策略 var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser().Build();

当我们分析 Fiddler 中的调用时,我们发现那些抛出 401 的请求具有 Negotiate 而不是 bearer token 的授权。 当我们启动该站点时,它没有任何问题并且可以工作一段时间但开始发送授权:在几次请求后进行协商。 我在 Angular 中的所有 HTTP 调用之间添加了大约 100 毫秒的延迟,在 WEB API 响应 header 中放置了 no-cache,没有什么可以解决问题。 此问题仅发生在 IE11 生产和 pre-production 环境中的某些用户。但他们可以在 IE11 中使用其他环境而不会出现任何问题。另一个有趣的因素,pre-production 对某些用户有效,同一用户在生产中遇到问题,反之亦然,两者都在同一个域中,但在不同的框中。生产是唯一一个拥有有效 SSL 证书的网站,其余站点(开发除外)拥有 self-signed 个证书。 对于配置文件中提到的 URL,在 WEB API 中启用了 CORS。 我正在寻找帮助。非常感谢任何输入

我们已遵循 @JoshuaBarron reply 并在站点级别启用匿名访问。那解决了这个问题。我们错过了在生产和预生产中在站点级别应用匿名访问。不幸的是,我们无权更改任何内容。