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

时间:2013-06-06 16:33:12

标签: windows web-services delphi authentication

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

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

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

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

由于

修改

  • 当前的身份验证类型为NTLM。

  • 我的应用程序没有任何登录/密码对话框。我引用的登录对话框是标题为

  • 的“Windows安全”的系统登录对话框
  • C#服务器和Delphi客户端在同一台计算机上运行。我的计算机是域的一部分,服务器只能在本地网络中调用。

编辑#2。编辑#2 提示登录时,会出现请求标题:

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 :(得分:0)

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

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

<强>域\用户名“

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

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