Exemplo n.º 1
0
        public async Task SetAccessToken()
        {
            using (var cert = Helper.GetX509Certificate2(CertTlsName, CertsPath, CertsPass))
            {
                var clientHandler = new HttpClientHandler();
                clientHandler.ClientCertificates.Add(cert);
                clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
                clientHandler.SslProtocols             = SslProtocols.Tls12;

                var dataToSend = new Dictionary <string, string>
                {
                    { "grant_type", "client_credentials" }
                };

                using (var content = new FormUrlEncodedContent(dataToSend))
                    using (var client = new HttpClient(clientHandler))
                    {
                        bool isSuccess = false;
                        while (!isSuccess)
                        {
                            var request = new HttpRequestMessage(HttpMethod.Post, $"{HttpHost}/oauth2/token");
                            request.Content = content;
                            request.AddHeaders(Helper.GetX509Certificate2(CertSignName, CertsPath, CertsPass), await content.DigestValue(), "/oauth2/token", KeyId);
                            System.Console.WriteLine($"===========REQUEST========\n{request}");
                            using (HttpResponseMessage response = await client.SendAsync(request))
                            {
                                isSuccess = response.IsSuccessStatusCode;
                                if (isSuccess)
                                {
                                    System.Console.WriteLine($"===========RESPONSE========\n{response}");
                                    var responseContent = await response.Content.ReadAsStringAsync();

                                    var indexOfEndAccessToken = responseContent.IndexOf(",", 16);
                                    AccessToken = responseContent.Substring(17, indexOfEndAccessToken - 18);
                                }
                                else
                                {
                                    Thread.Sleep(100);
                                }
                            }
                        }
                    }
            }
        }