Bom dia Daniel,
Consegui subir o arquivo do certificado digital para o servidor. Tentei adaptar o código para o padrão que tu forneceu no tópico:
Obter um Token OAuth 2.0 com C#
Cheguei nisso adicionando a parte do certificado:
using System;
using System.IO;
using System.Reflection;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography.X509Certificates;
using Newtonsoft.Json;
string tokenEndpoint = "XXXXX";
string clientId = "XXXXX";
string clientSecret = "XXXXX";
string grantType = "client_credentials";
string certificatePath = @"XXXXX";
string certificatePassword = "XXXXX";
// Carregue o certificado digital
X509Certificate2 certificate = new X509Certificate2(certificatePath, certificatePassword);
// Configurar o HttpClientHandler com o certificado
HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
using (HttpClient client = new HttpClient(handler))
{
// Crie os parâmetros do form-data
var formData = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", grantType),
new KeyValuePair<string, string>("client_id", clientId),
new KeyValuePair<string, string>("client_secret", clientSecret),
});
// Faça a solicitação POST para o endpoint do tokena
var response = client.PostAsync(tokenEndpoint, formData).Result;
// Garanta que a solicitação foi bem-sucedida
response.EnsureSuccessStatusCode();
// Leia o resultado da requisição
var result = response.Content.ReadAsStringAsync().Result;
// Deserialize o JSON usando a biblioteca NewtonSoft usando "dynamic"
var tokenResult = JsonConvert.DeserializeObject<dynamic>(result);
// Preencha a variável com o valor da propriedade "access_token" do JSON.
Variables["token"].Value = (string)tokenResult.access_token;
}
Quando realizo a chamado estou tendo o seguinte erro:
Removendo a parte do handler do certificado, a requisição “funciona” retornando o status 403 de forbidden:
Eu testei o path no servidor onde o certificado está e consigo listar os arquivos da pasta, então imagino que não seja um problema de acesso.
O código funciona localmente na minha máquina então pensei que pudesse ser alguma especificidade do latromi no tratamento desse handler.
Consegue me auxiliar com alguma indicação?