带有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