【问题标题】:Problem with redirection to HttpWebResponse Uri with basic authentication使用基本身份验证重定向到 HttpWebResponse Uri 的问题
【发布时间】:2019-10-11 15:28:54
【问题描述】:

我需要将 Web 应用程序之外的用户重定向到使用基本身份验证的页面。

这是我一直在尝试的:

HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;    

String username = "username";
            String password = "password";
            String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
            req.Headers.Add("Authorization", "Basic " + encoded);

HttpWebResponse response = req.GetResponse() as HttpWebResponse;
return this.Redirect(response.ResponseUri.ToString());

我也尝试过缓存方案,但没有成功:

CredentialCache myCache = new CredentialCache();

            myCache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
            req.Credentials = myCache;

我能得到一些帮助吗?

【问题讨论】:

  • 标准基本身份验证只需要req.Credentials = new NetworkCredential(username, password);。但这取决于您要连接的服务。您也可以添加req.PreAuthenticate = true;,它在某些情况下效果更好。如果您必须使用标头,请将其添加到 HttpRequestHeader.Authorization 并使用 UTF8ASCII 对凭证进行编码。 ISO-8859-1 可能不正确,这取决于实际使用的字符集。

标签: c# asp.net authentication asp.net-core httpwebrequest


【解决方案1】:

将我的 Web 应用程序之外的用户重定向到使用基本身份验证的页面

所以您想重定向某人到另一个页面,而该页面需要基本身份验证?那么您想将用户发送到该目标页面吗?

然后,您将无法仅通过基本身份验证请求该目标页面并对其进行操作。你基本上有两个选择:

  1. 从其他页面检索内容并自己呈现。这不会重定向用户,而是将他们保留在您的网站上。
  2. 重定向到目标页面的 URL,但包含凭据作为 URL 的一部分,以便用户的浏览器将使用这些凭据对该页面执行基本身份验证。

    具有基本身份验证凭据的 URL 通常如下所示:https://username:password@example.com/

    因此,如果您希望用户重定向到那里,您实际上必须向用户公开凭据。否则,您将无法让他们自己去那里,因为如果不让用户看到,就无法通过身份验证。

【讨论】:

  • 感谢您的回答!如果页面需要其他类型的身份验证(例如表单身份验证),是否有可能重定向?
  • 仅当目标页面允许您以其他方式传递凭据时。但无论如何,您应该注意这会将凭据公开给最终用户。所以这可能是不可取的。
猜你喜欢
  • 1970-01-01
  • 2015-07-22
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2021-05-17
  • 2010-11-24
相关资源
最近更新 更多