Web services 如何在Delphi中处理安全web服务的客户端身份验证?

Web services 如何在Delphi中处理安全web服务的客户端身份验证?,web-services,delphi,sharepoint,authentication,delphi-2010,Web Services,Delphi,Sharepoint,Authentication,Delphi 2010,我有一个SharePoint服务器在我的网络上运行,我正在尝试在Delphi中构建一个应用程序,它允许我访问托管在那里的各种应用程序 在与SharePoint服务器相同的网络上运行我的应用程序可以正常工作,但是,当我尝试在不属于同一域的VM上运行它时,我无法获得身份验证。我一直在寻找一些关于如何处理此类场景的身份验证的建议,更具体地说,我应该提示用户输入他们的凭据,还是有一些内置的安全模型可以用于此 理想情况下,我希望尽量避免在我的应用程序中处理用户名和密码,让操作系统来处理这类事情,然而,目前

我有一个SharePoint服务器在我的网络上运行,我正在尝试在Delphi中构建一个应用程序,它允许我访问托管在那里的各种应用程序

在与SharePoint服务器相同的网络上运行我的应用程序可以正常工作,但是,当我尝试在不属于同一域的VM上运行它时,我无法获得身份验证。我一直在寻找一些关于如何处理此类场景的身份验证的建议,更具体地说,我应该提示用户输入他们的凭据,还是有一些内置的安全模型可以用于此


理想情况下,我希望尽量避免在我的应用程序中处理用户名和密码,让操作系统来处理这类事情,然而,目前我似乎看不到任何其他解决方法。

经过一些调查,对于我的特定场景,我决定最好的方法是使用。我之所以选择这种方法,是因为经过彻底的调查后,我发现Indy确实存在一些缺陷&而且它没有内置我们需要的所有身份验证处理


WinINet支持提示输入凭据并自动跨网络进行身份验证。请参阅。

首先,您需要知道SharePoint支持哪些身份验证方法(例如Basic、Digest、NTLM、Kerberos),以及当前哪些方法处于活动状态。NTLM不需要用户交互,但另一个域需要是“受信任的”iirc。基本身份验证要求应用程序发送用户名/密码,因此,如果密码没有硬编码,则需要用户交互。@mjn据我所知,当我尝试访问web服务时,我会得到一个401,服务器应响应一个WWW Authenticate标头,指示哪种类型它支持的身份验证。那么,在这一点上,我需要截取它并提示用户输入凭据吗?这里的目标是允许用户从任何SharePoint服务器打开文件,无论他们在哪里运行我的应用程序,因此,可能存在域不“受信任”并且需要模拟的情况。基本上这是正确的,但是要提供凭证,可能需要大量代码和客户机/服务器交互步骤,这在现有代码中更容易解决。Internet Direct(Indy)支持NTLM,因此在发送HTTP POST时,它将在后台处理凭据。只需将必要的身份验证处理程序单元添加到项目中(Indy自动注册它们),并使用调试器查看其工作情况。@mjn我目前正在使用Indy,我已经添加了
IdAuthenticationNTLM
单元,如果我连接到网络,它会处理所有NTLM内容。然而,就像我说的,当我不在网络上时,我只会得到401,因为我的凭证可能是错误的。我希望重新使用现有代码来处理此问题(例如,提示用户输入凭据并通过网络发送),但问题是我不知道如何做到这一点。我将尝试包含
IdAuthenticationDigest
&
IdAuthenticationSSPI
单元,以查看它是否自动检测到此情况并进行提示。您需要验证服务器是否配置为接受这些身份验证类型。