使用NTLM安全性从AngularJS调用WebAPI2服务

Lok*_*oki 6 ajax ntlm angularjs asp.net-web-api2

我有两个项目; 一个是使用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
    });
Run Code Online (Sandbox Code Playgroud)

当它在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
Run Code Online (Sandbox Code Playgroud)

从我可以收集的内容来看,令牌的格式表明它正在使用NTLM安全性.我可以做些什么来传递强制这个Authorization标头通过$ http请求发送?

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

我目前正在将WebAPI控制器移动到第一个项目中以避免任何跨域调用; 也许这是最好的事情,因为这个REST服务只会被MVC项目调用?

任何帮助将非常感激!

use*_*573 -1

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