2015-03-25 1 views
0

Мне нужно воспользоваться службой для получения билета приложения для проверки подлинности другой службы. Решение размещено на конечной точке.Практическое руководство. Веб-клиент C# для доступа к конечной точке службы (протокол Oauth 2.0, аналогичный протоколу) с Mutual TLS

Я попытался использовать приложение POSTMAN в Google Chrome, и он успешно завершен и возвращает мне AppID. Когда я отправляю запрос (POST) в приложение POSTMAN, он запрашивает сертификат. Когда я выбираю правильный сертификат, вызов выполняется успешно.

Мне нужно реализовать то же самое в C# (в веб-приложении)

Я попытался с помощью библиотеки RestSharp.RestClient и я постоянно получаю следующее сообщение об ошибке: «Сертификат клиента не найден в сертификатах сайта».

Ссылка на код для справки.


var client = new RestSharp.RestClient("MyUrl"); 

var request = new RestSharp.RestRequest("pksecure/oauth20_clientcredentials.srf", RestSharp.Method.POST); 
request.AddParameter("grant_type", "client_credentials"); 
request.AddParameter("param2", "value2"); 
request.AddParameter("scope", "machinename"); 

client.ClientCertificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection(); 
client.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(
    @"E:\MyCertificate.pfx" 
    , "MyPassword" 
    )); 

System.Net.ServicePointManager.ServerCertificateValidationCallback += 
     delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslError) 
     { 
      bool validationResult = true; 
      return validationResult; 
     }; 


var response = client.Execute(request); 
var content = response.Content; // raw content as string 

Pls. помогите сделать этот вызов, используя взаимный TLS.

TIA, Sam.

ответ

0

Я не уверен, почему я не смог это сделать, используя RestSharp.

Но я мог бы заставить его работать с помощью HttpWebRequest Вместо этого.

Кроме того, ранее я использовал файл Certficate.Pfx, который вызвал ошибку. Используя файл Certificate.Cer, проблема решена.

проводки код для справки:

var request = (HttpWebRequest)WebRequest.Create("MyURL/oauth20_clientcredentials.srf"); 

var postData = "grant_type=client_credentials"; 
postData += "&param2=value2"; 
postData += "&scope=" + HttpUtility.UrlEncode("machinename"); 
var data = Encoding.ASCII.GetBytes(postData); 

request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = data.Length; 

using (var stream = request.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
} 

request.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(@"E:\MyCertificate.cer")); 

var response = (HttpWebResponse)request.GetResponse(); 

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

return appToken; 

Спасибо,

Сэм Jayander Тиагараян.

 Смежные вопросы

  • Нет связанных вопросов^_^