Я не могу сделать HttpClient Post с сертификатом на основе cUrl - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующая команда 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...