# Requisição de Web API com Certificado

**URL:** <https://community.latromi.com.br/t/requisicao-de-web-api-com-certificado/1226>\
**Category:** Ajuda & Suporte\
**Tags:** web-api, csharp\
**Created:** [Abril 23, 2024, 11:32am UTC](https://community.latromi.com.br/t/requisicao-de-web-api-com-certificado/1226 "2024-04-23T11:32:14Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![Rafael](https://community.latromi.com.br/letter_avatar_proxy/v4/letter/r/4da419/32.png) [@Rafael](https://community.latromi.com.br/u/Rafael)\
**Post date:** [Maio 7, 2024, 1:11pm UTC](https://community.latromi.com.br/t/requisicao-de-web-api-com-certificado/1226/7 "2024-05-07T13:11:08Z")

</div>

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#](https://community.latromi.com.br/t/obter-um-token-oauth-2-0-com-c/1142)

Cheguei nisso adicionando a parte do certificado:

```cs
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:

![image](https://community.latromi.com.br/uploads/default/original/2X/3/39cac144a24a19698d166f919900bfcaf262b54a.png)

Removendo a parte do handler do certificado, a requisição “funciona” retornando o status 403 de forbidden:

![image](https://community.latromi.com.br/uploads/default/original/2X/9/9b3766c11f4362447d5887a5adc0d4d1255aeeb6.png)

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?

---

_[View the full topic](https://community.latromi.com.br/t/requisicao-de-web-api-com-certificado/1226)._
