XMLHttpRequest SOAP request with Windows Authentication



我正在尝试使用XMLHttpRequest(火狐)向服务器发出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);

在这种情况下,一切都按预期工作。当我运行此代码时,系统会提示我输入用户名和密码,输入凭据后,我将收到服务器的响应。这适用于基本、摘要和 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 中删除协商)。

最新更新