Bom dia,
Estamos desenvolvendo uma página que precisará fazer uma requisição a uma API que demanda o envio de um certificado digital a cada chamada. Qual a forma ideal para eu subir esse certificado e como fazer para acessar seu caminho por dentro de um form do latromi?
Eu fiz um código c# local na minha máquina mas estou com dificuldades de transcrevê-lo para o latromi, seria mais ou menos isso:
using System;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using Newtonsoft.Json;
public class TokenResponse
{
public string access_token { get; set; }
}
public class ProdAuthentication
{
public string GetToken(string clientId, string clientSecret)
{
string tokenEndpoint = "ENDPOINT_API";
string grantType = "client_credentials";
string certificatePath = "PATH_CERTIFICADO";
string certificatePassword = "SENHA_CERTIFICADO";
try
{
X509Certificate2 certificate = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.DefaultKeySet);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(tokenEndpoint);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.ClientCertificates.Add(certificate);
var data = Encoding.ASCII.GetBytes($"grant_type={Uri.EscapeDataString(grantType)}&client_id={Uri.EscapeDataString(clientId)}&client_secret={Uri.EscapeDataString(clientSecret)}");
request.ContentLength = data.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
string jsonResponse = reader.ReadToEnd();
TokenResponse tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(jsonResponse);
return tokenResponse.access_token;
}
}
}
}
catch (WebException webEx)
{
string responseText = string.Empty;
if (webEx.Response != null)
{
using (var streamReader = new StreamReader(webEx.Response.GetResponseStream()))
{
responseText = streamReader.ReadToEnd();
}
}
throw new Exception("Erro ao solicitar o token.\r\nDetalhe: " + webEx.Message + "\r\nResposta: " + responseText);
}
catch (Exception ex)
{
throw new Exception("Erro ao solicitar o token.\r\nDetalhe: " + ex.Message);
}
}
}
class Program
{
static void Main(string[] args)
{
// Substitua os valores de clientId e clientSecret pelos valores corretos
string clientId = "CLIENT_ID";
string clientSecret = "CLIENT_SECRET";
try
{
ProdAuthentication prodAuth = new ProdAuthentication();
string tokenResponse = prodAuth.GetToken(clientId, clientSecret);
Console.WriteLine("Token obtido com sucesso:");
Console.WriteLine(tokenResponse);
}
catch (Exception ex)
{
Console.WriteLine("Erro ao obter o token:");
Console.WriteLine(ex.Message);
}
}
}