Tôi muốn truy cập listdata.svc (dịch vụ chia sẻ) nằm trên domainA.contoso.com từ một ứng dụng web nằm trên domainB.contoso.com - Xác thực có vẻ là một vấn đề.401 khi cố gắng triển khai CORS cho SharePoint
Khi cố gắng truy cập ListData.svc qua cuộc gọi JQuery Ajax, với CORS được bật, máy chủ trả về 401. Nếu tôi chạy cùng một Truy vấn từ trang .htm mà tôi thực thi từ bên trong SharePoint, cuộc gọi hoạt động tốt, vì tên miền giống nhau.
SharePoint đang sử dụng NTLM với xác thực ẩn danh bị tắt - Tôi cho rằng 401 là kết quả của thông tin đăng nhập cửa sổ không được chuyển đến máy chủ SharePoint - nhưng tôi không biết cách thêm thông tin xác thực này vào tiêu đề. Tôi đã đặt xhrFields: {withCredentials: true}, nhưng điều này dường như không khắc phục được sự cố xác thực.
Để kích hoạt CORS, tôi đã thiết lập sau đây phản hồi HTTP Headers trên SharePoint trong IIS:
- Access-Control-Allow-Credentials: true
- Access-Control-Allow-Headers: xuất xứ, Content-Type, Chấp nhận
- Access-Control-Allow-Origin: *
- Access-Control-Yêu cầu-Phương pháp: POST, GET, HEAD, OPTIONS
Xác thực Windows được bật trong IIS cho ứng dụng web của tôi và tôi không đặt trình xử lý HTTP "OPTIONSVerbHandler" trong IIS. Biến nó thành đọc dường như không tạo nên sự khác biệt.
gọiJQuery Ajax (từ ứng dụng trên 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 Header và 401 đáp ứng:
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
bạn đã cố gắng gửi bài này trên http://sharepoint.stackexchange.com/ –