2
respostas

[Dúvida] NÃO CONSIGO CHAMAR API COM UM CERTIFICADO

Preciso acessar uma api , que requer um um certificado , quando eu faço no insominia passar o arquivo .pfx funciona tranquilo. mas quando vou fazer isso dentro de um projeto Spring boot, com o FeignClient eu não consigo fazer a requisição alguém poderia me ajudar ?

2 respostas

E aí, Matheus! Beleza?

Quando você tá usando o Insomnia, é fácil, né? Só joga o arquivo .pfx lá e tudo funciona. No Spring Boot, com o FeignClient, precisa de alguns passos a mais.

Primeiro, confirma se tá importando certinho o certificado no projeto. O arquivo .pfx deve estar no lugar certo. No Spring Boot, pode ser uma pasta chamada "resources".

Depois, no código, quando tá configurando o FeignClient, tem que adicionar a lógica pra lidar com o certificado. Usa a classe RestTemplate, que o Feign usa por baixo dos panos. Algo assim:

RestTemplate restTemplate = new RestTemplate();

KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream keyStoreStream = new ClassPathResource("seucertificado.pfx").getInputStream();
keyStore.load(keyStoreStream, "suasenha".toCharArray());

CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLContext(SSLContexts.custom()
                .loadKeyMaterial(keyStore, "suasenha".toCharArray())
                .build())
        .build();

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
restTemplate.setRequestFactory(requestFactory);

Lembrando de adaptar os nomes e senhas, claro.

Ah, e não esquece de adicionar a dependência do Apache HttpClient no seu projeto.

Vou te explicar melhor

`@FeignClient(name = "sicoob-auth", url = "${application-property.sicoob.auth.url}" ,configuration = ClientConfig.class) public interface SicoobAuthClient {

@PostMapping("/auth/realms/cooperado/protocol/openid-connect/token")
Object getToken(@RequestParam("grant_type") String grantType,
                @RequestParam("client_id") String clientId,
                @RequestParam("scope") String scope);

} ` estou precisando passar ali no ClientConfig essa configuração e meu arquivo não ta dentro do projeto, vc recomendaria colocar onde ? e estou com esse erro ![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade ) Pode me informar as versões que esta utilizando ? Estou utilizando o Spring boot 3