具有 Windows 身份验证的 XMLHttpRequest SOAP 请求
XMLHttpRequest SOAP request with Windows Authentication
我正在尝试使用 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);
在这种情况下,一切都按预期进行。当我 运行 这段代码时,系统会提示我输入用户名和密码,输入凭据后我会从服务器得到响应。这适用于基本、摘要和 Windows 身份验证。
但我不想收到输入凭据的提示,所以我将第二行更改为
xmlhttp.open('POST', url, true, username, password);
现在这仅适用于基本和摘要身份验证,但不适用于 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
原来响应中的Negotiate header是麻烦制造者。当我将服务器上的 Windows 身份验证提供程序更改为 NTLM 而不是 Neogotiate,NTLM 时,它就可以工作了。
但是,如果您无权访问服务器,则需要在进一步处理之前以某种方式修改客户端的响应 header(从 WWW-Authenticate 中删除协商)。
我正在尝试使用 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);
在这种情况下,一切都按预期进行。当我 运行 这段代码时,系统会提示我输入用户名和密码,输入凭据后我会从服务器得到响应。这适用于基本、摘要和 Windows 身份验证。
但我不想收到输入凭据的提示,所以我将第二行更改为
xmlhttp.open('POST', url, true, username, password);
现在这仅适用于基本和摘要身份验证,但不适用于 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
原来响应中的Negotiate header是麻烦制造者。当我将服务器上的 Windows 身份验证提供程序更改为 NTLM 而不是 Neogotiate,NTLM 时,它就可以工作了。
但是,如果您无权访问服务器,则需要在进一步处理之前以某种方式修改客户端的响应 header(从 WWW-Authenticate 中删除协商)。