我有一个托管在 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 并重新发送包含身份验证信息的请求......对吗?