我需要以编程方式从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