最近,我询问了一个关于服务器何时返回重定向的question有关NetworkCredential和HttpWebRequest.Credentials。我确定构建一个CredentialCache of NetworkCredential实例适用于我的场景。现在,我有了一个临时方法,它用硬编码的所有域名构建一个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?它是否引入了安全漏洞来重用跨重定向的凭据?
谢谢。
发布于 2011-07-21 09:04:57
我使用了代码并得到了401错误(SharePoint 2010 )。然后登录其他站点,在下面的行中尝试"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"))发布于 2011-02-07 07:25:48
内特
我看你在用“谈判”,所以你为什么不用
CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials为了所有的重定向?
来自MSDN:
DefaultNetworkCredentials属性返回的凭据仅适用于NTLM、协商和基于Kerberos的身份验证。
DefaultNetworkCredentials返回的凭据表示运行应用程序的当前安全上下文的身份验证凭据。对于客户端应用程序,这些通常是运行应用程序的用户的Windows凭据(用户名、密码和域)。对于ASP.NET应用程序,默认的网络凭据是登录用户的用户凭据或模拟的用户.。
https://stackoverflow.com/questions/4918682
复制相似问题