web-services - 使用 MSXML 拒绝访问

标签 web-services vb6 msxml

我有一个经典 ASP 站点的 VB6 后端。然后,该 VB 使用 MSXML2.XMLHTTP 调用同一服务器上的 Web 服务。这适用于我们所有的服务器,但只有一个。如果我将 Web 服务站点设置为接受匿名登录,它将起作用,但是如果我强制仅集成安全性 MSXML 返回访问被拒绝错误。

我正在使用示例中的代码 here.

Set objDom = CreateObject("MSXML2.DOMDocument")
Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")

' Load XML
objDom.async = False
objDom.loadXML XmlBody

' Open the webservice
objXmlHttp.Open "POST", AsmxUrl, False

' Create headings
objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objXmlHttp.setRequestHeader "SOAPAction", SoapActionUrl

' Send XML command
objXmlHttp.send objDom.xml

编辑:
按照 AnthonyWJones 的建议,我按照 list 进行了检查,但它仍然无法正常工作。使用 Fiddler 它显示一个带有 401 响应的请求。身份验证选项卡显示:
No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM

我确实注意到了一个奇怪的行为。当我使用登录到远程桌面的用户的凭据调用该网站时,它将起作用。我得到谈判,挑战,然后是200,它会起作用。任何想法为什么当用户通过远程桌面登录而不是其他时间时这会起作用?

最佳答案

我猜你是依靠底层的 WinINET HTTP 堆栈在使用 Windows 集成安全性受到服务器挑战时向服务器提供当前用户凭据。

只有当 WinINET 认为主机服务器位于 Intranet 区域时,它才会默认执行此操作。即使这样,用户的 Intranet 区域安全设置也可能已被调整为不允许这样做。

当您以运行 VB6 应用程序的同一用户身份登录时,请尝试使用客户端计算机上的浏览器访问该站点。它认为服务器位于哪个区域?如果它不是 Intranet,则需要将主机添加到属于该区域的站点列表中。当您在那里时,打开区域安全设置并向下滚动到用户身份验证类别。登录应配置为“仅在 Intranet 区域自动登录”。

编辑 :根据您的评论,这些东西配置正确。我会做的几件事是:-

  • 检查服务器是否严格配置为仅接受 Windows 集成安全性。
  • 检查机器上的代理设置,权限被拒绝是代理服务器的问题吗?
  • 使用 ProgID“MSXML2.XMLHTTP.3.0”确保使用正确版本的 MSXML dll(某些其他第三方应用程序的安装可能会损坏注册表,导致使用旧版本的 MSXML)。
  • 安装 Fiddler在机器上并在 VB6 应用程序尝试调用时观看 http 对话。是否有单个 401 响应? WinINET 是不是使用了用户凭据?有 3 401 个响应吗? WinINET 已尝试使用当前用户凭据,但服务器不接受它们。

  • 至此,我们进入了系统管理领域。例如,如果 fiddler 跟踪显示尝试进行身份验证没有使用 NTLM,那么它使用的是 Kerberos 身份验证,请检查服务器和客户端的时钟设置是否在 5 分钟内彼此以及域 Controller 。

    检查服务器事件日志,是服务器无法联系域 Controller 。

    在只有 Windows 集成安全性的服务器上放置一个简单的 .htm 并尝试从浏览器中访问它,是否成功?

    关于web-services - 使用 MSXML 拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200311/

    相关文章:

    delphi - 如何使用delphi访问msxml6中complextype中的粒子?

    php - Coldfusion 在 PHP 中使用 SOAP Web 服务

    web-services - Nunit - 基于 XML 的数据提供者

    在列表框中搜索指定字符串 VB6

    delphi - 查找应用程序先前实例的最简单方法

    soap - 使用经典 ASP 发送 'application/soap+xml' SOAP 请求

    java - 部署在同一 tomcat 服务器上的两个 Web 应用程序之间的跨上下文通信

    web-services - 错误 :Cannot compile Groovy files: no Groovy library is defined for module "myprojectname"

    sql-server - 64位系统上的COM+ VB6应用程序: IBM CLI Driver transaction error when connecting to DB2

    Delphi "DOMVendor"Open XML 和 Xerces : known limitations?