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

时间:2011-02-07 06:42:08

标签: c# .net authentication redirect

当服务器返回重定向时,我最近询问了有关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?它是否会引入安全漏洞以跨重定向重用凭据?

感谢。

2 个答案:

答案 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应用程序,默认   网络凭据是用户   登录用户的凭据,或   用户被冒充。