我想从位于 domainB.contoso.com 的 Web 应用程序访问位于 domainA.contoso.com 的 listdata.svc(共享点服务) - 身份验证似乎是一个问题。
当尝试通过 JQuery Ajax 调用访问 ListData.svc 并启用 CORS 时,服务器返回 401。如果我从 SharePoint 内部执行的 .htm 页面运行相同的查询,则调用工作正常,因为域是相同。
SharePoint 使用 NTLM 并关闭了匿名身份验证 - 我认为 401 是 Windows 凭据未传递到 SharePoint 服务器的结果 - 但我不知道如何将这些凭据正确添加到标题中。 我设置了 xhrFields: { withCredentials: true },但这似乎并不能纠正身份验证问题。
为了启用 CORS,我在 IIS 中的 SharePoint 上设置了以下 HTTP 响应标头:
- 访问控制允许凭据:true
- 访问控制允许标头:来源、内容类型、接受
- 访问控制允许来源:*
- 访问控制请求方法:POST、GET、HEAD、OPTIONS
在 IIS 中为我的 Web 应用程序启用了 Windows 身份验证,并且我没有在 IIS 中设置“OPTIONSVerbHandler”HTTP 处理程序。将其转为阅读似乎没有什么不同。
JQuery Ajax 调用(来自 subdomainB.contoso.com 上的应用程序):
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: listUrl,
xhrFields: { withCredentials: true },
crossDomain:true,
processData: false,
async: true,
dataType: "json",
converters: {
// WCF Data Service .NET 3.5 incorrectly escapes singles quotes, which is clearly
// not required (and incorrect) in JSON specs.
// http://bugs.jquery.com/ticket/8320?cversion=0&cnum_hist=1
"text json": function (textValue) {
return jQuery.parseJSON(textValue.replace(/(^|[^\\])\\'/g, "$1'"));
}
},
success: function (data, status, xhr) {
//successFunc(data.d.results);
alert("working!");
},
error: function (xhr, status, error) {
alert("failure!");
}
});
HTTP 标头和 401 响应:
Key Value
Request OPTIONS /_vti_bin/ListData.svc/Contacts HTTP/1.1
Accept */*
Origin http://domainB.contoso.com
Access-Control-Request-Method GET
Access-Control-Request-Headers content-type, accept
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host domainA.contoso.com
Content-Length 0
DNT 1
Connection Keep-Alive
Cache-Control no-cache
Key Value
Response HTTP/1.1 401 Unauthorized
Server Microsoft-IIS/7.5
SPRequestGuid 1e33061c-f555-451b-9d69-0d83eff5f5ea
WWW-Authenticate NTLM
X-Powered-By ASP.NET
MicrosoftSharePointTeamServices 14.0.0.4762
Access-Control-Allow-Headers Origin, Content-Type, Accept
Access-Control-Allow-Origin *
Access-Control-Request-Methods POST, GET, HEAD, OPTIONS
Access-Control-Allow-Credentials true
Date Wed, 15 May 2013 15:04:51 GMT
Content-Length 0