当服务器返回重定向时,我最近询问了有关NetworkCredential和HttpWebRequest.Credentials的question。我确定构建一个NetworkCredential实例的CredentialCache适用于我的场景。现在我有一个临时方法来构建一个CredentialCache,其中所有域名都是硬编码的。它工作正常,非常棒。
CredentialCache cache = new CredentialCache();
cache.Add(new Uri("http://example.com"), "Negotiate", loginCredentials);
cache.Add(new Uri("http://redirected.example.com"), "Negotiate", loginCredentials);
request.Credentials = cache;
现在,我需要让它更灵活。重定向的整个想法是在服务器上进行负载平衡。在调用HttpWebRequest.GetResponse()之前,客户端不会确切地知道它将被重定向到哪里。构建CredentialCache以包含遇到的每个重定向服务器的首选方法是什么?而且,这使得这么困难的理由是什么?为什么单个NetworkCredentials实例不能满足每个重定向的HttpWebRequest.Credentials?它是否会引入安全漏洞以跨重定向重用凭据?
感谢。
答案 0 :(得分:2)
我使用了代码并得到了401错误(SharePoint 2010 OOB Web服务)。然后检查了其他一些网站,并在下面的行中尝试了“NTLM
”而不是“Negotiate
”。现在工作正常。
不工作:
cache.Add(new Uri(myProxy.Url), "Negotiate", new NetworkCredential("UserName", "Password", "Domain"))
<强>工作:强>
cache.Add(new Uri(myProxy.Url), "NTLM", new NetworkCredential("UserName", "Password", "Domain"))
答案 1 :(得分:0)
内特,
我发现你正在使用&#34;协商&#34;,为什么不使用
CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials
所有重定向?
来自MSDN:
由...返回的凭据 DefaultNetworkCredentials属性是 仅适用于NTLM,协商, 和基于Kerberos的身份验证。
返回的凭据 DefaultNetworkCredentials表示 的身份验证凭据 当前的安全上下文 应用程序正在运行为一个 客户端应用程序,这些是 通常是Windows凭据(用户 名称,密码和域名 用户运行应用程序。对于 ASP.NET应用程序,默认 网络凭据是用户 登录用户的凭据,或 用户被冒充。