【发布时间】:2019-08-27 02:46:06
【问题描述】:
我们的 Delphi 客户端应用程序使用 THTTPRIO 调用 SOAP 服务,受 Windows 身份验证保护(托管在内部 IIS 服务器上)。 从 Delphi XE 到 Delphi 10.3,调用 web 服务的代码运行良好。在 Delphi 10.3 和 10.3.1 中,这不再有效。
从 10.3 开始,服务器作为身份验证过程的一部分发送的 401 被 THTTPRIO 处理为最终的 html 响应,作为发送凭据的邀请,因此引发异常(SOAP 期望内容是 xml,而不是 html) .
在 Delphi 10.3 发行说明中,我读到 SOAP 实现已更改,但我找不到任何细节。
我考虑过发布代码,但实际发布的是 Delphi 源代码的一部分,我不确定是否允许。
如果 uri 只能通过 Windows 身份验证访问,则可以通过调用任何 SOAP 服务来重现此问题。
有谁知道如何使用 Windows 身份验证从 Delpi 10.3 应用程序调用 SOAP 服务?
编辑:相同的 SOAP 测试客户端应用程序在使用 10.2.3 编译时可以工作,而在使用 10.3 编译时则不能。由于不同之处在于 Embarcadero 从 WinInet 迁移到 WinHTTP for SOAP,似乎 Delphi 的 System.Net.HttpClient.Win.pas 中没有实现集成安全性。
有人加过这个吗?
【问题讨论】:
-
在 10.3 之前,它依赖于 WinInet(如果你使用 USE_INDY 指令,它依赖于 Indy)。现在,它依赖于新的 Delphi THTTPClient,而在 windows 上它依赖于 WinHTTP。你可以查看马可博客blog.marcocantu.com/blog/…
-
检查了两个建议:一个涉及基本身份验证,一个涉及证书。不幸的是,没有 Windows 集成安全性。
标签: delphi soap windows-authentication