首页 文章

如何使用经过Windows身份验证的Web服务避免使用Delphi HTTPRio调用的登录对话框

提问于
浏览
2

我在IIS中托管了一个C#webservice,启用了Windows身份验证,我从Delphi 7客户端调用 .

当我调用该方法时,我有一个系统登录对话框,我必须输入我的Windows用户名和密码才能进行身份验证 .

有没有办法跳过登录对话框并使用当前记录的用户凭据来调用Web服务?

我在post上看了很多解释如何通过在BeforePost事件中“注入”带有InternetSetOption(...)的用户名/密码元素来避免使用基本身份验证的登录对话框,但没有关于Windows身份验证的信息 . 我期待一切都能完美地运作......

谢谢

编辑

  • 当前的身份验证类型是NTLM .

  • 我的应用程序没有任何登录/密码对话框 . 我引用的登录对话框是 Headers 中带有“Windows安全性”的系统登录对话框

  • C#服务器和Delphi客户端在同一台计算机上运行 . 我的计算机是域的一部分,服务器只能在本地网络中调用 .

编辑#2当提示登录时,会出现请求 Headers :

POST https://vbergeron.info.com/dev-mmcore/SecurityService.svc HTTP/1.1
SOAPAction: "http://mysite.ca/schemas/mobilemed-ws/security/ISecurityService/GetPermissions"
Content-Type: text/xml
User-Agent: mmrdv.exe/4.0.0.0 Windows-7-SP1/6.1.7601 Ultimate/x86
Host: vbergeron.info.com
Content-Length: 366
Connection: Keep-Alive
Cache-Control: no-cache

这是响应头:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
X-Powered-By: ASP.NET
Date: Fri, 07 Jun 2013 14:38:35 GMT
Content-Length: 0
Proxy-Support: Session-Based-Authentication

因此HTTPRio不能正确“处理”NTLM头 . 它应该捕获401并重新发送请求,包括身份验证信息......对吗?

1 回答

  • 0

    对于带有NTLM的HTTPrio(请参阅我的回答https://stackoverflow.com/a/1081582/80901):

    在THTTPRio组件的WebNode子组件的用户名属性中,使用域名后跟反斜杠和用户名:

    'domain\username'

    在设计时输入WSDL URL后,HTTPRIO组件将列出可用的端口和服务 .

    在HTTP代理(Don's Proxy)中,NTLM显示为请求身份验证类型 .

相关问题