1

我将这些包含在使用条款中

  IdAuthentication
  ,
  IdAuthenticationDigest
  ,
  IdAuthenticationNTLM
  ,
  IdAuthenticationSSPI

目前我有这样做的代码:

    W.Request.BasicAuthentication := True;
    W.Request.Username := AOptionsPtr^.AuthUsername;
    W.Request.Password := AOptionsPtr^.AuthPassword;

如果我可以访问 OpenSSL:

    TmpOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
    TmpOpenSSL.SSLOptions.Method := sslvSSLv23;
    TmpOpenSSL.SSLOptions.Mode := sslmClient;
    TmpOpenSSL.SSLOptions.VerifyMode := [];
    TmpOpenSSL.SSLOptions.VerifyDepth := 0;
    //--
    W.IOHandler := TmpOpenSSL;

从浏览 WinINet 的文档(是的,我知道它不是 Indy)看来,身份验证也需要持久连接。我想这也适用于印地?网址: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa384220 (v=vs.85).aspx

我需要让它与 SharePoint 一起工作。但是,问题是我没有要测试的 Intranet SharePoint 服务器。因此,我无法单步执行代码并查看哪些有效,哪些无效。但是,我有一个可以为我测试它的潜在客户。

我还需要做些什么才能使上述代码使用 Windows 身份验证(NTML?SPPI?)与 SharePoint 一起工作

Indy 会自动测试并使用正确的身份验证吗?

我需要设置W.Request.BasicAuthentication := False;自动身份验证/检测才能工作吗?

如果需要多个请求(第一个响应为 401),我假设我需要在发出 GET 请求时在自己的代码中添加对此的支持?(设置身份验证模式并发出新请求?)

4

1 回答 1

2

Request.Connection您可以通过将属性设置为 来请求持久连接'keep-alive'

TIdHTTP 将检查服务器的WWW-Authorization标头并将其与TIdAthentication您包含在uses子句中的类进行比较。该TIdHTTP.OnSelectAuthorization事件将告诉您选择了哪个类,并允许您在需要时覆盖它。TIdHTTP.OnAuthorization如果身份验证失败并且需要不同的凭据,则将触发该事件。

The BasicAuthrnication property simply allows TIdHTTP to fall back to TIdBasicAuthentication if no other TIdAuthentication class is assigned.

No, you do not need to handle multi-request authentications manually, like NTLM. TIdHTTP and TIdAuthentication handle those details for you.

于 2013-01-25T10:06:17.087 回答