【问题标题】:XMLHttpRequest SOAP request with Windows AuthenticationXMLHttpRequest 带有 Windows 身份验证的 SOAP 请求
【发布时间】:2017-07-06 10:48:28
【问题描述】:

我正在尝试使用 XMLHttpRequest (firefox) 向 Microsoft 服务器发出 SOAP 请求,服务器上允许使用不同的身份验证方案。

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);

现在这仅适用于 Basic 和 Digest 身份验证,但不适用于 Windows Auth (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

【问题讨论】:

    标签: javascript authentication firefox xmlhttprequest ntlm


    【解决方案1】:

    原来,响应头中的协商是麻烦制造者。当我将服务器上的 Windows 身份验证提供程序更改为 NTLM 而不是 Neogotiate 时,NTLM 就可以了。

    但是,如果您无权访问服务器,则需要以某种方式修改客户端的响应标头(从 WWW-Authenticate 中删除 Negotiate),然后再进行进一步处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2015-09-21
      • 1970-01-01
      • 2012-11-29
      • 2017-06-01
      • 1970-01-01
      相关资源
      最近更新 更多