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

标签 windows web-services delphi authentication

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

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

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

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

谢谢

编辑

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

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

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

编辑 #2 当提示登录时,有请求 header :

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

这是响应 header :

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 header 。它应该捕获 401 并重新发送包含身份验证信息的请求......对吗?

最佳答案

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

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

'域\用户名'

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

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

关于windows - 如何使用 Windows 身份验证的 Web 服务避免使用 Delphi HTTPRio 调用的登录对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16967445/

相关文章:

java - 哪些文件应该导入到 Web 服务项目的 Subversion 存储库中?

java - Netbeans 7.4 对 Web 应用程序的支持

delphi - 将 Windows 桌面应用程序连接到远程位置

MySQL 错误代码 : 13 - Permission denied

windows - 如何在以.bat文件编写的powershell命令中读取变量

javascript - 如何在 Typescript 中进行类型安全的 Web 服务调用

Delphi 2007 和 Indy10 在 IdGlobal 中编译错误

Delphi T 记录列表

windows - IPv4 属性 UI 中与 "Use the following IP Address"等效的 Powershell 是什么?

windows - 如何检查 DLL 依赖?