我在 IE11 中遇到了一个非常奇怪的问题,即使我通过 AngularJS 设置它,浏览器也会覆盖我请求中的 Authorization 标头。
基本上,我为所有看起来像这样的请求注册了一个 HTTP 拦截器:
AuthInterceptorService.request = function (config) {
config.headers.Authorization = "Bearer " + bearerToken;
}
这适用于所有浏览器(在某些条件下甚至是 IE)。我在 IIS 中将我的应用程序设置为允许匿名身份验证,并且为此子站点禁用了基本/集成身份验证,但是,父配置启用了 Windows 身份验证。
偶尔发生的情况是浏览器会向根 URL 发出请求以获取静态文件(例如/favicon.ico
)。此请求被 401 拒绝。浏览器以协商的身份验证响应并获取网站图标。此时,所有其他浏览器仍然让我的代码设置 Authorization 标头,但是一旦在 IE 中发生这种集成身份验证,授权标头似乎卡住了 - 无论我的代码做什么,授权标头始终使用集成身份验证。这会导致对我的 API 的所有请求都失败,因为不存在承载令牌。
我可以通过指定一个更本地的 favicon(可以匿名提供静态文件)来解决 favicon 问题,但我想知道这个问题是否有更简单的解决方案。即使在先前的请求中进行了 Windows 身份验证,我能否以某种方式说服 IE 让我设置 Authorization 标头?
注意:我发现这个问题似乎是相关的(可能是相同的根本原因)。