带有Windows身份验证的XMLHttpRequest SOAP请求
我正在尝试使用XMLHttpRequest(firefox)向服务器发送SOAP请求,Microsoft服务器允许使用不同的身份验证方案。
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', url, true);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
xmlhttp.setRequestHeader("Connection", "keep-alive");
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
}
xmlhttp.send(soapRequest);
在这种情况下,一切都按预期工作。 当我运行这个代码时,我会得到提示输入用户名和密码,输入凭据后我会从服务器获得响应。 这适用于Basic,Digest和Windows身份验证。
但我不想提示输入凭证,所以我改变了第二行
xmlhttp.open('POST', url, true, username, password);
现在这只适用于基本和摘要式身份验证,但不适用于Windows身份验证(NTLM)。 我将从服务器获得401响应,在使用此身份验证方法时很好,但不会发生进一步的通信。
我也尝试将域添加到“network.automatic-ntlm-auth.trusted-uris”首选项,但它没有帮助。
服务器的完整响应:
Cache-Control private
Content-Length 0
Date Fri, 07 Jul 2017 16:48:22 GMT
Server Microsoft-IIS/7.5
WWW-Authenticate Negotiate
NTLM
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
事实证明,在响应头文件中协商是麻烦制造者。 当我将服务器上的Windows身份验证提供程序更改为NTLM而不是Neogotiate时,NTLM即可使用。
但是,如果您无法访问服务器,则需要在进一步处理之前以某种方式修改客户端的响应头(从WWW-Authenticate中移除协商)。
链接地址: http://www.djcxy.com/p/3799.html上一篇: XMLHttpRequest SOAP request with Windows Authentication
下一篇: Proxy HTTP digest authentication request to LDAP server