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

Nat*_*ate 2 .net c# authentication redirect

我最近问了一个有关服务器返回重定向时的 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;
Run Code Online (Sandbox Code Playgroud)

现在,我需要使其更加灵活。重定向的整个想法是为了服务器上的负载平衡。在调用 HttpWebRequest.GetResponse() 之前,客户端不会确切知道它将被重定向到哪里。构建 CredentialCache 以包含遇到的每个重定向服务器的首选方法是什么?另外,造成如此困难的原因是什么?为什么单个 NetworkCredentials 实例不能满足每个重定向的 HttpWebRequest.Credentials ?跨重定向重用凭据是否会引入安全漏洞?

谢谢。

小智 5

我使用该代码并收到 401 错误(SharePoint 2010 OOB Web 服务)。然后检查其他一些网站并在下面的行中尝试使用“ NTLM”而不是“ ”。Negotiate现在运行良好。

不工作:

cache.Add(new Uri(myProxy.Url), "Negotiate", new NetworkCredential("UserName", "Password", "Domain"))
Run Code Online (Sandbox Code Playgroud)

在职的:

cache.Add(new Uri(myProxy.Url), "NTLM", new NetworkCredential("UserName", "Password", "Domain"))
Run Code Online (Sandbox Code Playgroud)