【问题标题】:Calling WebAPI2 service from AngularJS with NTLM security使用 NTLM 安全性从 AngularJS 调用 WebAPI2 服务
【发布时间】:2015-03-30 01:36:00
【问题描述】:

我有两个项目;一个是使用 Angular 的 MVC 项目(因此不是真正的 MVC),另一个是 WebAPI2 项目,其中各种控制器向第一个项目提供数据并接受来自第一个项目的数据。

第一个项目是使用angular的$http查询WebAPI服务:

var request = $http({
        method: "GET",
        url: "http://localhost:1234/api/Entity/",
        json: true,
        crossDomain: true,
        datatype: 'json',
        params: { action: "get" },
        withCredentials: true
    });

当它在 IE10 中运行时,数据返回没有任何问题。但是,在 Chrome 或 Firefox 中运行它会导致 401 错误。我使用 Fiddler 来检查请求之间的差异,并将其缩小到 Authorization 标头。 IE 请求如下所示:

GET http://localhost:1234/api/Entity?action=get
HTTP/1.1
Referer: http://localhost:1234/Home
Accept: application/json, text/plain, */*
Accept-Language: en-GB
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64;     Trident/6.0)
Connection: Keep-Alive
DNT: 1
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIGAbEdAAAAD+mN4751DVFNv2xW6c59dCajEgQQAQAAAPUXp1AtIpqEAAAAAA==
Host: localhost:58843

据我所知,令牌的格式表明它正在使用 NTLM 安全性。我可以做些什么来强制通过 $http 请求发送此 Authorization 标头?

我看不到 WebAPI 服务中指定了任何安全性(我在过去几天继承了这个项目,所以还不是完全熟悉它);由于它是 CORS 请求,因此是否正在发送 Authorization 标头?

我目前正在将 WebAPI 控制器移动到第一个项目中以避免任何跨域调用;鉴于此 REST 服务仅由 MVC 项目调用,也许这是最好的做法?

任何帮助将不胜感激!

【问题讨论】:

    标签: ajax angularjs asp.net-web-api2 ntlm


    【解决方案1】:

    Firefox(实际上是 IE 以外的任何浏览器)不支持本机 NTLM,但您可以使用此插件来使其工作:https://addons.mozilla.org/en-US/firefox/addon/integrated-auth-for-firefox/

    我使用它并将我的内部域列入白名单,并且能够像使用 IE 一样进行从 angular 到 WebApi 的相同类型的调用。如果您查看开发控制台的网络选项卡,您会在获得 200 之前看到有几个 401 拒绝的协商尝试,但直到协商完成后才会出现在您的应用程序中。

    【讨论】:

      【解决方案2】:

      这似乎与 IIS 中“Windows 身份验证”选项的提供程序的顺序有关。 “协商”提供者需要从提供者列表中删除,只留下 NTLM。有关从 IIS 提供程序列表中删除“协商”的分步说明,请参阅下面的文章。它对我有用。我希望它对你有用。 http://www.leftycoder.com/windows-authentication-chrome-iis/

      【讨论】:

      • 虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      • 感谢有关如何发布答案的反馈。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多