【发布时间】:2015-04-21 08:34:03
【问题描述】:
什么会导致 Internet Explorer 替换 HTTP 标头
Authorization : Bearer <server-provided-token>
与
Authorization : Negotiate <some token>
何时发出 AJAX 请求?
详情
在 Internet Explorer 中,一些配置为包含标头 Authorization: Bearer ... 的 AJAX 请求由 Internet Explorer 发送,而标头为 Authorization: Negotiate ...。
例如,Fiddler 显示三个请求中的前两个包含Authorization : Bearer... 标头,而第三个突然包含Authorization : Negotiate... 标头。前两个请求成功,第三个请求失败,因为请求无法正确验证。
所有请求都是使用相同的客户端代码构造的,并且一个接一个地发出(在一秒钟内)。我已经验证Authorization 标头在所有三种情况下都正确包含Bearer 令牌,直到将请求提供给浏览器为止。
另外,我在 Chrome 中没有看到相同的行为;它只发生在 IE 中。
请求 1
GET http://localhost/myapp/api/User HTTP/1.1 接受:应用程序/json、文本/纯文本、*/* 授权:承载oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuFf_JJxq-DKIt0JDyPXSiGpmV_cpT8FlL3D1DN-Tv5ZbT73MTuBOd5y75-bsx9fZvOeJgg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6tQCOkOwIG_FmEJpP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCvMVTPz30KwoEPi6fHUcL3qHauP-v9uypv2e48TyPHUwLYmNFxyafMhBx4TkovnRcsdLHZiHmSjMq0V9a2Vw70 参考:http://localhost/client/login.html 接受语言:en-US 接受编码:gzip,放气 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko 主机:本地主机 DNT: 1 连接:保持活动请求 2
POST http://localhost/myapp/api/Permissions HTTP/1.1 引用者:http://localhost/client/#/Dashboard 内容类型:应用程序/json 授权:承载oEXS5IBu9huepzW6jfh-POMA18AUA8yWZsPfBPZuFf_JJxq-DKIt0JDyPXSiGpmV_cpT8FlL3D1DN-Tv5ZbT73MTuBOd5y75-bsx9fZvOeJgg04JcO0cUajdCH2h5QlMP8TNwgTpHg-TR9FxyPk3Kw6bQ6tQCOkOwIG_FmEJpP89yrOsoYJoCfrAoZ7M4PVcik9F9qtPgXmWwXB2eHDtkls44wITF_yM_rPm5C47OPCvMVTPz30KwoEPi6fHUcL3qHauP-v9uypv2e48TyPHUwLYmNFxyafMhBx4TkovnRcsdLHZiHmSjMq0V9a2Vw70 接受:应用程序/json、文本/纯文本、*/* 接受语言:en-US 接受编码:gzip,放气 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko 主机:本地主机 内容长度:1419 DNT: 1 连接:保持活动 Pragma:无缓存请求 3
GET http://localhost/myapp/api/UserPreferences/Dashboard HTTP/1.1 引用者:http://localhost/client/#/Dashboard 内容类型:应用程序/json 授权:协商 YHsGBisGAQUFAqBxMG+gMDAuBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHqI7BDlOVExNU1NQAAEAAACXsgjiBgAGADMAAAALAAsAKAAAAAYBsR0AAAAPVk1ERVZFTlYtU1JTQ0VSSVM= 接受:应用程序/json、文本/纯文本、*/* 接受语言:en-US 接受编码:gzip,放气 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko 连接:保持活动 DNT: 1 主机:本地主机请求是通过 AngularJS $http 服务发出的,后端是托管在 IIS 中的 ASP.NET Web API。
【问题讨论】:
-
嗨 shrichards - 你有没有想过这个问题?我似乎在使用 IE 11 时遇到了同样的问题。
-
@JoshuaBarron 我一直无法确定问题的根本原因。我通过创建一个单独的服务来解决这个问题,该服务具有发行令牌的单一职责。在 IIS 中,该令牌服务被配置为支持 Windows 和匿名身份验证。然后将使用令牌进行身份验证的服务配置为仅在 IIS 中使用匿名身份验证(因为身份验证是通过中间件中的令牌处理的)。这使 IE 在访问安全服务时无法尝试与 IIS 执行集成身份验证。
-
您能否提供一个更详细的示例,您是如何制作此服务的(在 github 或 pastebin 中)。我因这个问题失去了两个多星期,但仍然找不到解决方法。提前致谢。
-
Martin - 我已经有了 shrichards 描述的相同设置。我跟着bitoftech.net/2014/09/24/… 进行了设置。对于客户提出的一些请求,我仍然遇到此问题(请参阅我的链接问题)。
-
我也看到了这个,我正在寻找一个好的解决方案。关注这个帖子,如果我找到解决方案会发布
标签: angularjs internet-explorer asp.net-web-api owin