在重定向未知时为HttpWebRequest.Credentials构建CredentialCache

我最近在服务器返回重定向时问了一个关于NetworkCredential和HttpWebRequest.Credentials的问题 。 我确定构建一个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? 它是否会引入安全漏洞以跨重定向重用凭据?

谢谢。

我使用了代码并得到了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")) 

内特,

我看到你正在使用“谈判”,所以你为什么不使用

 CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials 

对于所有重定向?

来自MSDN:

DefaultNetworkCredentials属性返回的凭据仅适用于NTLM,协商和基于Kerberos的身份validation。

DefaultNetworkCredentials返回的凭据表示运行应用程序的当前安全上下文的身份validation凭据。 对于客户端应用程序,这些应用程序通常是运行应用程序的用户的Windows凭据(用户名,密码和域)。 对于ASP.NET应用程序,默认网络凭据是登录用户或被模拟用户的用户凭据。