【问题标题】:IE11 overrides Bearer authorization header in intranet environmentIE11 覆盖内网环境中的 Bearer 授权标头
【发布时间】: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


    【解决方案1】:

    如果您查看RFC 4559 document 的协商操作示例,它涉及到 IE 使用的伪机制,用于在与 IIS 进行身份验证时协商安全性的选择。

    客户端第一次请求文档,没有授权
    标头已发送,因此服务器响应

           S: HTTP/1.1 401 Unauthorized
           S: WWW-Authenticate: Negotiate
    

    客户端将使用 SPNEGO GSSAPI 获取用户凭据 机制类型来识别生成要发送到的 GSSAPI 消息
    带有新请求的服务器,包括以下授权
    标题:

           C: GET dir/index.html
           C: Authorization: Negotiate a87421000492aa874209af8bc028
    

    服务器将解码 gssapi-data 并将其传递给 SPNEGO
    gss_accept_security_context 函数中的 GSSAPI 机制。如果 上下文不完整,服务器将响应 401 状态
    带有包含 gssapi-data 的 WWW-Authenticate 标头的代码。

           S: HTTP/1.1 401 Unauthorized
           S: WWW-Authenticate: Negotiate 749efa7b23409c20b92356
    

    客户端将解码 gssapi-data,将其传递给
    Gss_Init_security_context,并将新的 gssapi-data 返回到
    服务器。

    所以,我认为你不可能在谈判发生时混在一起,因为过程是内部的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 2018-01-07
      • 1970-01-01
      • 2017-03-25
      • 2017-09-12
      • 2016-06-23
      • 2020-07-31
      • 2023-04-10
      相关资源
      最近更新 更多