2

我有一个托管在 IIS 中的 C# web 服务,启用了 Windows 身份验证,我从 Delphi 7 客户端调用它。

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

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

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

谢谢

编辑

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

  • 我的应用程序没有任何登录/密码对话框。我指的登录对话框是标题中带有“Windows 安全”的系统登录对话框

  • C# 服务器和 Delphi 客户端在同一台计算机上运行。我的计算机是域的一部分,服务器将仅在本地网络内被调用。

编辑#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 并重新发送包含身份验证信息的请求......对吗?

4

1 回答 1

0

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

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

'域\用户名'

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

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

于 2013-06-06T17:44:55.747 回答