【发布时间】: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