HTTP上的NTLM:有C#客户端实现吗?
我需要以编程方式从服务器下载文件 当我下载文件时,它看起来像一个请求,但显示HTTPS对话实际上是4个请求:HTTP上的NTLM:有C#客户端实现吗?,c#,sharepoint,windows-authentication,ntlm,C#,Sharepoint,Windows Authentication,Ntlm,我需要以编程方式从服务器下载文件 当我下载文件时,它看起来像一个请求,但显示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 NT
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>
REQ1:获取https://mycorp.raxsp.com/_windows/default.aspx?ReturnUrl=/personal/mycorp_user1/_vti_bin/cmis/rest?getRepositories
响应1:401未经授权,WWW验证NTLM
要求2:授权书=
响应2:401,WWW-Authenticate-NTLM-tlrmtvntuaacaaacgadgadgaaafgokc+[…]
要求3:授权NTLM TLRMTVNTUAADAAAAAAYA[…]
RESP3:302找到,设置Cookie FedAuth=77u/PD94bW[…],Location/personal/mycorp\u user1/\u vti\u bin/cmis/rest?getRepositories
要求4:GET/personal/mycorp\u user1/\u vti\u bin/cmis/rest?getRepositories
回复4:200好的,
我试着用一个简单的with user/password下载这个文件,但正如预期的那样,我只得到了错误401。我正在考虑实现全部4个请求,使用()计算挑战,但这听起来很容易出错
是否有客户端库或代码段可以通过HTTP进行NTLM身份验证?它是为,所以必须是开源的,最好使用。
不涉及Kerberos/SSO/域。我们一直使用
System.Net.WebClient
public static byte [] downloadSharepointFile (string url){
using (var client = new WebClient { Credentials = new NetworkCredential("username", "password", "domain") })
{
client.Headers.Add("Accept: application/json");
return client.DownloadData(url);
}
}
@gilly3的可能重复:这是一个不同的问题:1)我对IE8没有问题2)该问题的用户名“boxname\peter”表示涉及域。我的用户名不包含\。3) 问题是“客户端和IIS都在同一个窗口上”,这不是我的情况。4) 接受的解决方案显示“键入本地计算机上站点的主机名”。我在本地计算机上没有站点。当客户机和服务器都在同一台机器上时,就会出现这个问题,这不是我的情况。正如我从请求中看到的,它们如下所示:身份验证、设置Cookie、重定向、下载设置了cooke的文档。当您仅使用HttpWebRequest时,它可能会对您的请求进行身份验证,但不会请求使用随身份验证一起发送的客户端cookie的文档。因此,我假设NTLM在这里是正常的,而其余部分不起作用,它在我的上起作用。如果不适合您,请让我知道,我们可以比较项目设置