在经典 ASP 中的 Msxml2.ServerXMLHTTP 请求中使用特定用户/域

问题描述 投票:0回答:1

我们有一个需要与之通信的客户端,他们的 API 页面仅支持 NTLM 身份验证。 我们的网站运行经典的 ASP (jScript),因此请原谅语法与您通常使用 VB 所期望的略有不同。 他们向我们提供了用户/密码/域详细信息,让我们可以连接到他们。

我正在使用的是(我还注释掉了我尝试过的其他一些选项):

var oXmlHTTP            = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0");
oXmlHTTP.open("GET", "EXTERNAL_URL", false, "THEIR_DOMAIN\THEIR_USER", "PASSWORD");

//var strB64            = base64_encode("THEIR_DOMAIN\THEIR_USER" + ":" + "PASSWORD");
//oXmlHTTP.setRequestHeader("Authenticate", "NTLM "+strB64);
//oXmlHTTP.setRequestHeader("Authorization", "NTLM "+strB64);
//oXmlHTTP.setRequestHeader("WWW-Authenticate", "NTLM "+strB64);
oXmlHTTP.send();

Response.write(oXmlHTTP.getAllResponseHeaders());

我得到的响应是一个 401 未经授权的标头,在尝试了很多事情并深入研究使用wireshark真正进行的请求之后,我可以看到以下 3 个连接:

78  3.003575    MY_IP   THEIR_IP    HTTP    320     GET EXTERNAL_URL HTTP/1.1 
83  3.031194    MY_IP   THEIR_IP    HTTP    398     GET EXTERNAL_URL HTTP/1.1 , NTLMSSP_NEGOTIATE
85  3.061152    MY_IP   THEIR_IP    HTTP    1014    GET EXTERNAL_URL HTTP/1.1 , NTLMSSP_AUTH, User: MYLOCALDOMAIN\THEIR_DOMAINTHEIR_USER

所以它所做的就是从我提供的用户名中删除反斜杠并将我的本地计算机域添加到请求中,我确信这是因为它是 Windows 身份验证方法的一种形式,但我们不是他们域的一部分,所以有什么方法可以强制它使用我提供的域名吗?

asp-classic ntlm-authentication msxml2
1个回答
0
投票

我一发布这篇文章,我就有了一个疯狂的想法......

oXmlHTTP.open("GET", "EXTERNAL_URL", false, "THEIR_DOMAIN\\THEIR_USER", "PASSWORD");

域名和用户名之间的额外斜杠修复了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.