2015-09-23 209 views
0

我想在C#中创建一个https客户端。Https客户端授权在C#

我有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); 

我想我缺少的东西头,但无法找到有关的文档中的任何信息。 这是一个困难的问题,所以任何建议将非常感激。

回答

0

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

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

像这样的东西应该工作:

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

哇。非常感谢你,它工作:) – Someone