我需要以編程方式從SharePoint服務器下載文件。HTTP上的NTLM:任何C#客戶端實現?
當我下載的文件與Firefox它看起來像一個單一的請求,但Httpfox表明HTTPS會話實際上是4個請求:
REQ1: GET https://mycorp.raxsp.com/_windows/default.aspx?ReturnUrl=/personal/mycorp_user1/_vti_bin/cmis/rest?getRepositories
RESP1: 401 Unauthorized, WWW-Authenticate NTLM
REQ2: Authorization NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
RESP2: 401, WWW-Authenticate NTLM TlRMTVNTUAACAAAACgAKADgAAAAFgokC+[...]
REQ3: Authorization NTLM TlRMTVNTUAADAAAAGAAYAIAAAAAYA[...]
RESP3: 302 Found, Set-Cookie FedAuth=77u/PD94bW[...], Location /personal/mycorp_user1/_vti_bin/cmis/rest?getRepositories
REQ4: GET /personal/mycorp_user1/_vti_bin/cmis/rest?getRepositories
RESP4: 200 OK, <download begins>
我嘗試下載一個簡單的HttpWebRequest與用戶的文件/密碼,但如預期我只是得到錯誤401.我正在考慮實施全4名的請求,計算與NTLM over HTTP authentication algorithm(spec)的挑戰,但聽起來很容易出錯...
是否有一個客戶端庫或代碼片斷通過HTTP身份驗證執行NTLM的寵物?
這是an Open Source project,所以必須是開源的,最好使用HttpWebRequest。
沒有涉及Kerberos/SSO /域。
可能重複的代碼(http://stackoverflow.com/questions [System.Net.WebClient不使用Windows身份驗證工作]/1030177/system-net-webclient-doesnt-work-with-windows-authentication) – gilly3 2013-04-04 04:19:44
@ gilly3:這是一個不同的問題:1)IE8沒有問題2)該問題的用戶名「boxname \ peter」表示域名是參與其中。我的用戶名不包含\。 3)問題說「客戶端和IIS都在同一個Windows上」,這不是我的情況。 4)接受的解決方案是「輸入本地計算機上的站點的主機名」。本地計算機上有** no **站點。當客戶端和服務器都在同一臺機器上時,會發生這種問題,這不是我的情況。 – 2013-04-04 05:12:46
正如我從請求中看到的,它們如下所示:Authenticate,Set-Cookie,Redirect,下載具有cooke集的文檔。當您僅使用HttpWebRequest時,它可能會對您的請求進行身份驗證,但不會要求使用身份驗證發送客戶端cookie的文檔。所以我認爲NTLM在這裏可以,而其餘的不起作用 – Lanorkin 2013-04-04 10:12:47