您不必响应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!
}
}
大总结,将不胜感激实现... –