使用HTTP Web请求发送HTTP标头进行NTLM身份验证

12

我想登录到一个Sharepoint门户网站,但弹出了登录对话框,使用的是NTLM身份验证。我该如何在C#中修改HTTP标头以进行成功的登录请求?我认为我需要向门户网站已登录部分的页面发出HTTPWebRequest,并将HTTP标头集合与此一起发布?

3个回答

23
您可以使用 WebRequest 类来实现此操作。
WebRequest req = WebRequest.Create(tokenUri);
req.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
req.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
WebResponse resp = req.GetResponse();
StreamReader reader = new StreamReader(resp.GetResponseStream());
var token = reader.ReadToEnd().Trim();

这段代码将整个响应读入名为token的变量中。


11
尝试时出现了“远程服务器返回错误:(401)未授权”的提示。在Firefox浏览器上使用相同的URL/用户名/密码可以正常登陆。这是HTTP上的NTLM认证问题。 - Nicolas Raoul

3

要使用NTLM,请参阅John的答案。如果需要在会话之间保留头信息,请查看HttpWebRequest对象上的CookieContainer属性。您需要保留对CookieContainer的引用,并将其附加到您进行的任何其他HttpWebRequests。


0
为了在 WebRequest 中使用 NTLM 身份验证,凭证信息应存储在 CredentialCache 中:
var request = (HttpWebRequest)WebRequest.Create(url);
// INIT REQUEST HERE ...

var credential = new NetworkCredential(username, password, domain);
var credentialCache = new CredentialCache();
credentialCache.Add(new Uri(url), "NTLM", credential);
request.Credentials = credentialCache;

// SEND ...

来源:http://predicatet.blogspot.com/2007/01/httpwebrequest-networkcredential-with.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接