2013-01-25 60 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