У меня есть следующая команда cUrl, которую нужно запустить в среде ac # .net Core.
curl -X POST -k https://example.com:8443/as/token.oauth2 \
-v \
--cert TPPCertificate.crt \
--key TPPprivateKey.key \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code&client_id=TPP_test&code=9C6UrsGZ0Z3XJymRAOAgl7hKPLlWKUo9GBfMQQEs&redirect_uri=https://localhost/auth'
Я пробовал следующий код, но он не отправляет сертификат на сервер:
var input = model as AccessRetrieveModel;
var certFile = Path.Combine(@"c:\tmp\", "TPPCertificate.crt");
using (var handler = new HttpClientHandler())
{
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
var buffer = File.ReadAllBytes(@"C:\tmp\TPPCertificate.crt");
var clientCert = new X509Certificate2(buffer, "Test", X509KeyStorageFlags.Exportable);
//add the cert to the handler
handler.ClientCertificates.Add(clientCert);
using (var client = new HttpClient(handler))
{
handler.ServerCertificateCustomValidationCallback = (request, cert, chain, errors) =>
{
//this verifies the server API cert against expected thumprint
return true;
};
var requestContent = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("grant_type", "authorization_code"),
new KeyValuePair<string, string>("client_id",ClientID),
new KeyValuePair<string, string>("code",input.Code),
new KeyValuePair<string, string>("redirect_uri","https://localhost/auth"),
});
// Get the response.
HttpResponseMessage response = await client.PostAsync(
$"{AuthenticationUrl}/as/token.oauth2",
requestContent);
// Get the response content.
HttpContent responseContent = response.Content;
// Get the stream of the content.
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
// Write the output.
var result = await reader.ReadToEndAsync();
return Newtonsoft.Json.JsonConvert.DeserializeObject<AccessToken>(result);
}
}
}
}
Кто-нибудь знает, как добавить как файл .crt, так и ключ .key
Обновление Я создал файл .pfx для .crt и .key и попытался добавить его в запрос.Это все еще рассматривается как не добавленный.
также пытался, где сертификат является новым сертификатом.
Есть ли другие способы добавить .crt и .key, как это делает cUrl?
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) =>
{
return true;
};
var client = new RestClient($"{AuthenticationUrl}/as/token.oauth2");
client.ClientCertificates = new X509CertificateCollection() { Certificate };
client.Proxy = new WebProxy();
var request = new RestRequest(Method.POST);
request.AddParameter("grant_type", "authorization_code");
request.AddParameter("client_id", ClientID);
request.AddParameter("code", input.Code);
request.AddParameter("redirect_uri", "https://localhost/auth");
IRestResponse response = client.Execute(request);