FwRest Com MTLS (cert digital)

Olá!

Estou desenvolvendo uma rotina de integração bancária. No caso, estou desenvolvendo a parte de um endpoint que utiliza CERTIFICADO DIGITAL (conexão MTLS). Utilizo o FwRest() atualmente, alguém sabe de que forma eu poderia fazer isso?

Já desenvolvi outros endpoints que não necessitam de MTLS (somente TLS nos outros).

Alguma idéia?

3 curtidas

Pessoal, resolvi o problema utilizando a função HTTPSPOST(). Praticamente a mesma coisa que o FwRest(), a diferença é que com essa função conseguimos enviar os certificados digitais junto à requisição.

Pode fechar o tópico adm :)

3 curtidas

Amigo, teria um exemplo da chamada com o certificado + client id e client secret? Montando o certificado?

@raphael.araujo1

Segue link:
https://tdn.totvs.com/display/tec/HTTPSPost

Segue exemplo:

#include "totvs.ch"
user function TSTPostSSL()
Local cURL := "https://homologacao.nfe.fazenda.sp.gov.br:443/nfeWEB/services/NfeStatusServico.asmx"
Local nTimeOut := 120
Local aHeadOut := {}
Local cHeadRet := ""
Local cPostRet := ""

// Acrescenta o UserAgent na requisição ...
// http://tools.ietf.org/html/rfc3261#page-179

AAdd( aHeadOut, 'User-Agent: Mozilla/4.0 (compatible; Protheus ' + GetBuild() + ')' )
cPostRet := HTTPSPost( cURL, "\certs\cert.pem" , "\certs\privkey.pem" , "pwdprivkey" , "" , "" , nTimeOut, aHeadOut, @cHeadRet )

if Empty( cPostRet )
conout( "Fail HTTPSPost" )
else
conout( "OK HTTPSPost" )
varinfo( "WebPage" , cPostRet )
endif

varinfo( "Header" , cHeadRet )

return

Felipe, este em especifico só passa o certificado, preciso que também passe o client id e o client secret. Será que é possível?

Veja se isso te ajuda

cURL     	:= "https://teste.com"

aHeader := {"Content-Type:application/x-www-form-urlencoded"} 

cResource 	:= "/api"
cPostParam  := 'grant_type='+Self:cKeyGrant+'&client_id='+Self:cMVXMLCID+'&client_secret='+Self:cMVXMLCSEC+'&scope='+Self:cKeyScope

//Realiza o post de acordo com o cURL e cResource
oRest := FwRest():New(cURL)
oRest:SetPath(cResource)
oRest:SetPostParams(cPostParam)
oJsonResp := JsonObject():New()

If oRest:Post(aHeader)

EndIf

Entendido, da pra usar o HTTSPOST com o cParams, passando as chaves.

Certo?

Tentarei, muito obrigado.

1 curtida