您不必響應NTLM(集成Windows身份驗證)挑戰,如果配置正確,您的瀏覽器應該爲您做。可能還有一些其他併發症。
第1步 - 瀏覽器
檢查瀏覽器可以訪問和使用的NTLM Web應用程序,或按你正在開發直接先將軟件發送您的憑據。
第2步 - JavaScript的withCredentials屬性
收到的401未經授權錯誤描述的症狀是,當我未能設置「withCredentials」屬性「真」一模一樣。我不熟悉jQuery,但要確保你設置該屬性的嘗試成功。
這個例子對我的作品:
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.');
}
};
第3步 - 服務器端支持CORS(可選)
我懷疑一個重要原因是人們在這個問題最終是,他們正在開發一個組件在其工作站上與其他組件託管在其他位置這會導致Cross-Origin Resource Sharing (CORS)問題。有兩種解決方案:
- 在您的瀏覽器中禁用CORS - 最終將您的工作部署在與您的代碼訪問的資源相同的來源時,這對開發很有用。
- 在您的服務器上啓用CORS - 在更廣泛的互聯網上有充足的閱讀,但這基本上涉及發送啓用CORS的標頭。
總之,使CORS具有憑證必須:
- 發送「訪問控制允許來源」相匹配的服務頁面的起源頭...... 這不可能是「*」
- 發送的訪問控制允許的憑據「,值爲「真」
這裏是我的Global.asax文件我的工作.NET代碼示例。我認爲很容易看到發生了什麼,並在需要時翻譯成其他語言。
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!
}
}
大總結,將不勝感激實現... –