【问题标题】:Building a CredentialCache for HttpWebRequest.Credentials when redirects are uknown当重定向未知时为 HttpWebRequest.Credentials 构建 CredentialCache
【发布时间】:2011-02-07 06:42:08
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c# .net authentication redirect


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      内特,

      我看到你在使用“协商”,所以你为什么不使用

      CredentialCache.DefaultNetworkCredentials or CredentialCache.DefaultCredentials
      

      所有重定向?

      来自 MSDN:

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

      返回的凭据 DefaultNetworkCredentials 代表 的身份验证凭据 当前的安全环境中, 应用程序正在运行。为一个 客户端应用程序,这些是 通常是 Windows 凭据(用户 名称、密码和域) 运行应用程序的用户。为了 ASP.NET 应用程序,默认 网络凭据是用户 登录用户的凭据,或 被冒充的用户。

      【讨论】:

      • 我希望我能。我们需要程序能够在本地帐户下运行。因此,我编写了一个登录对话框窗口,用户将在其中输入其有效的 kerberos 凭据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多