Jos*_*ron 5 authentication internet-explorer windows-authentication angularjs bearer-token
我在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让我设置授权标头?
注意:我发现这个问题似乎是相关的(也许是相同的根本原因).
如果您查看RFC 4559 文档的协商操作示例,它涉及 IE 在与 IIS 进行身份验证时协商安全选择的伪机制。
客户端第一次请求文档时,没有
发送 Authorization 标头,因此服务器响应Run Code Online (Sandbox Code Playgroud)S: HTTP/1.1 401 Unauthorized S: WWW-Authenticate: Negotiate客户端将使用 SPNEGO GSSAPI 机制类型获取用户凭据来识别,生成一条要通过新请求发送到
服务器的 GSSAPI 消息,包括以下授权
标头:Run Code Online (Sandbox Code Playgroud)C: GET dir/index.html C: Authorization: Negotiate a87421000492aa874209af8bc028服务器将解码 gssapi-data 并将其传递给
gss_accept_security_context 函数中的 SPNEGO GSSAPI 机制。如果上下文不完整,服务器将使用 401 状态
代码进行响应,并带有包含 gssapi-data 的 WWW-Authenticate 标头。Run Code Online (Sandbox Code Playgroud)S: HTTP/1.1 401 Unauthorized S: WWW-Authenticate: Negotiate 749efa7b23409c20b92356客户端将解码 gssapi-data,将其传递到
Gss_Init_security_context,并将新的 gssapi-data 返回到服务器
。
所以,我认为在谈判过程中你们不可能混在一起,因为这个过程是内部的
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |