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