c# - 未知重定向时为HttpWebRequest.Credentials构建CredentialCache




.net authentication (2)

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

谢谢。


内特,

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

CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials

所有的重定向?

来自MSDN:

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

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


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




redirect