Bạn không phải trả lời thử thách NTLM (Xác thực Windows tích hợp), trình duyệt của bạn nên làm điều đó cho bạn, nếu được định cấu hình đúng cách. Một số biến chứng khác cũng có thể xảy ra.
Bước 1 - Trình duyệt
Kiểm tra xem trình duyệt có thể truy cập và gửi thông tin của bạn với một ứng dụng web hoặc NTLM bằng cách nhấn các phần mềm bạn đang phát triển trực tiếp đầu tiên.
Bước 2 - JavaScript withCredentials thuộc tính
Các lỗi 401 Unauthorized nhận và các triệu chứng được mô tả là giống hệt nhau khi tôi đã thất bại trong việc thiết lập các thuộc tính 'withCredentials' thành 'true'. Tôi không quen với jQuery, nhưng hãy chắc chắn rằng nỗ lực của bạn trong việc thiết lập thuộc tính đó là thành công.
Ví dụ này làm việc cho tôi:
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://localhost:44377/SomeService", true);
xhttp.withCredentials = true;
xhttp.send();
xhttp.onreadystatechange = function(){
if (xhttp.readyState === XMLHttpRequest.DONE) {
if (xhttp.status === 200)
doSomething(xhttp.responseText);
else
console.log('There was a problem with the request.');
}
};
Bước 3 - Server side cho phép CORS (Không bắt buộc)
tôi nghi ngờ một lý do chính người kết thúc tại câu hỏi này là họ đang phát triển một thành phần trên máy trạm của họ với một thành phần khác được lưu trữ ở nơi khác. Điều này gây ra sự cố Cross-Origin Resource Sharing (CORS). Có hai giải pháp:
- Tắt CORS trong trình duyệt của bạn - tốt để phát triển khi cuối cùng công việc của bạn sẽ được triển khai trên cùng nguồn gốc với tài nguyên mà mã của bạn đang truy cập.
- Bật CORS trên máy chủ của bạn - có nhiều đọc trên internet rộng hơn, nhưng điều này về cơ bản liên quan đến việc gửi tiêu đề cho phép CORS.
Nói tóm lại, để cho phép CORS với các thông tin bạn phải:
- Gửi yêu cầu '-Control-Allow Access-Origin' tiêu đề phù hợp với nguồn gốc của trang phục vụ ... này không thể '*'
- Gửi yêu cầu 'Access-Control-Allow-Credentials' với giá trị 'true'
đây là làm việc .NET mẫu mã của tôi trong tập tin Global.asax của tôi. Tôi nghĩ rằng nó khá dễ dàng để xem những gì đang xảy ra và dịch sang các ngôn ngữ khác nếu cần thiết.
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.HttpMethod == "OPTIONS")
{
Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
Response.AddHeader("Access-Control-Max-Age", "1728000");
Response.End();
}
else
{
Response.AddHeader("Access-Control-Allow-Credentials", "true");
if (Request.Headers["Origin"] != null)
Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
else
Response.AddHeader("Access-Control-Allow-Origin" , "*"); // Last ditch attempt!
}
}
lớn Tóm lại, sẽ đánh giá cao thực hiện ... –