使用c#授权的Https客户端

本文关键字:Https 客户端 授权 使用 | 更新日期: 2023-09-27 18:14:20

我想用c#创建一个https客户端。

我有HTTP客户端工作得很好,我把它改成了HTTPS。但不幸的是,授权有问题(服务器使用OAuth 2)。

我的程序向服务器发送请求并获得令牌。但是它不能从服务器获取或发送任何数据。

服务器与其他客户端工作正常,所以这不是它的错。

这段代码导致了这个问题。我知道这一点,因为当我在服务器上注释授权时,数据被发送(一切都很好)。

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
        "Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
         string.Format("Authorization: {0}", token))));

这是整个函数,它应该发送数据:

WebRequestHandler handler = new WebRequestHandler();
X509Certificate certificate = GetMyX509Certificate();
handler.ClientCertificates.Add(certificate);
var client = new HttpClient(handler);
string uri = "https://192.168.0.10:8443/data";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
     string.Format("Authorization: {0}", token))));
client.BaseAddress = new Uri(uri);
var parameters = new Dictionary<string, string>();
parameters["name"] = name;
parameters["surname"] = surname;
JavaScriptSerializer serializer = new JavaScriptSerializer();
var json = serializer.Serialize(parameters);
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var response = client.PostAsync(uri, new StringContent(json, System.Text.Encoding.UTF8, "application/json")).Result;
Console.WriteLine((response.StatusCode.ToString()));
string resultContent = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(resultContent);

我想我在标题中缺少了一些东西,但在文档中找不到任何有关的信息。

使用c#授权的Https客户端

您不应该在AuthenticationHeaderValue的参数中包含HTTP头名称("Authorization: ")。设置Authorization属性将在请求中添加标题。

另外,对于OAuth 2,您可能希望使用"Bearer"作为方案,而不是用base64编码token

这样就可以了:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);