2013-01-25 34 views
1

我包括这在使用条款德尔福印的Sharepoint的Windows登录

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)似乎持久连接也需要认证。我想这也适用于Indy? URL: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384220(v=vs.85).aspx

我需要得到这个工作与SharePoint。但是,问题在于我没有Intranet SharePoint服务器要测试。因此,我无法逐句通过代码,看看哪些是有效的,哪些没有。但是,我有一个潜在客户可以为我测试它。

更重要的是,我需要做的就是上面的代码使用Windows身份验证(NTML?SPPI?)的SharePoint工作

威尔印自动测试和使用适当的auhentication?

我是否需要设置W.Request.BasicAuthentication := False;以使自动验证/检测工作?

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

回答

2

您可以要求由Request.Connection属性设置为'keep-alive'的持久连接。

TIdHTTP将检查服务器的WWW-Authorization标题并将其与uses子句中包含的TIdAthentication类进行比较。 TIdHTTP.OnSelectAuthorization事件会告诉你哪个班被挑选出来,并且允许你在需要的时候覆盖它。如果认证失败并且需要不同的凭证,将触发TIdHTTP.OnAuthorization事件。

BasicAuthrnication属性只允许TIdHTTP回落到TIdBasicAuthentication如果没有其他TIdAuthentication类被分配。

不,您不需要手动处理多请求身份验证,如NTLM。 TIdHTTPTIdAuthentication为您处理这些细节。

+0

嗨雷米。感谢您的回答。我会试试看。如果我预先填写用户名/密码,如果我理解正确,我不需要处理该事件? (假设我信任Indy选择正确的身份验证类型......我该怎么做。)如果我仍然需要BasicAuthentication作为备份,我应该将Request.BasicAuthentication设置为false吗? (请问Indy会自动将它用作备份验证身份验证与其他身份验证不匹配) – Tom

+1

您填写的用户/密码值将用于初始身份验证请求。如果服务器拒绝他们并再次请求认证,那么可以通过OnAuthorization事件更改这些值,甚至可以选择提示用户输入值。您必须将'BasicAuthentication'设置为true才能启用回退。 –

+0

感谢您的澄清!:) – Tom