如何在 ASP.Net 中为一组 Web 请求发送身份验证标头

Posted

技术标签:

【中文标题】如何在 ASP.Net 中为一组 Web 请求发送身份验证标头【英文标题】:How to send authentication header in ASP.Net for set of web request 【发布时间】:2014-06-05 05:18:05 【问题描述】:

我正在开发使用 ASP.Net Web API 的 REST 服务的 ASP.net 应用程序。我正在尝试对我的网站使用基本身份验证。我计划在完成基本身份验证后将它与 SSL 一起使用。

当前在登录按钮上单击我正在使用用户名和密码的 Base64 编码发送 Auth 标头,如下所示:

        string responseData = string.Empty;            
        string authToken = string.Empty;
        string loginInstance = url;

        // Create request.
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginInstance);
        request.Method = "POST";
        request.ContentType = "application/json";
        request.CookieContainer = new CookieContainer();
        String username = txtUserName.Text;
        String password = txtPassword.Text;
        String encoded = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
        request.Headers.Add("Authorization", "Basic " + encoded);
        request.ContentLength = 0;


        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
        String resultData = reader.ReadToEnd();
        bool result = false;
        result = Convert.ToBoolean(resultData);
        return result;

我假设我需要将身份验证标头发送到所有需要安全并通过身份验证的 Web api 请求。

有没有办法将身份验证标头附加到我发送的每个请求甚至是一组请求? 请注意:大部分 Web API 请求都是通过 JQuery 调用的。

如果这不是推荐的实施方法,请告诉我。

问候,

阿比拉什

【问题讨论】:

关注此链接***.com/questions/4675166/… Is there a way to attach authentication header to every request that I send or even to a set of requests? - 在 c# 和/或 javascript你提到 jquery)中使用工厂模式。让它接受 X 个可变参数(如 url 和有效负载等)并返回适当的对象,然后您可以进行 http 调用。 【参考方案1】:

你有没有这样尝试过:

 WebRequest request = (HttpWebRequest)WebRequest.Create("https://yoururl");
request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));

使用消息处理程序的 asp.net web api 中的基本 http 身份验证。 http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/

【讨论】:

我的问题是“如何确保授权标头作为每个请求的一部分发送?”。有没有一个地方我可以做到这一点,而不必为每个请求都做。【参考方案2】:

您可以尝试使用以下代码代替“request.Headers.Add("Authorization", "Basic " + encoded);" .

  request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + 
  Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));

【讨论】:

我的问题是“如何确保授权标头作为每个请求的一部分发送?”。有没有一个地方我可以做到这一点,而不必为每个请求都做 @Abdyax 创建一个基类,并在其中指定,然后您的所有请求都可以使用该基类 - 这确保它们都使用它。【参考方案3】:

我相信你可以添加

request.PreAuthenticare = true

【讨论】:

request.PreAuthenticate = true【参考方案4】:

您可以寻找HttpWebRequest.Credentials 属性。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginInstance);
request.Credentials = CredentialCache.DefaultCredentials;

以上示例包含当前登录用户的凭据。

“Credentials 属性可以是 NetworkCredential,在这种情况下,NetworkCredential 对象中包含的用户、密码和域信息用于对请求进行身份验证,也可以是 CredentialCache”。

MSDN Reference

【讨论】:

以上是关于如何在 ASP.Net 中为一组 Web 请求发送身份验证标头的主要内容,如果未能解决你的问题,请参考以下文章