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/