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