Autenticação Auth 2.0

Bom dia! Preciso consumir um Ws em REST que usa o protocolo de autenticação Auth 2.0 para disponibilizar tokens. Existe alguma forma no Protheus para fazer essa comunicação? Vi que no link (https://centraldeatendimento.totvs.com/hc/pt-br/articles/360019498331-MP-ADVPL-oAuth-2-0 ) o protocolo Auth 2.0 não está disponível ainda, porém entendi que seria para disponilizar tokens, no meu caso eu vou requisitar de um outro sistema.

Adriano, Você conseguiu fazer a requisição neste webservice? Caso tenha feito poderia compartilhar como ficou a requisição?

Pedro, conseguir sim. Vou compartilha como solução para a o meu Post.

Basicamente usando HttpPost ou FwRest você conseguiria implementar normal a integraçào com esse terceiro que tem um sass de oauth2.

No meu caso a solução foi a seguinte:



/*/{Protheus.doc} new
    Metodo construtor da classe
    @author user
    @since 26/03/2020
    @version version
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
/*/
Method new() class clsToken
    Self:oObjREST
    Self:aHeadStr         := { }
    Self:c_ClientId        := ""
    Self:c_CliSecret    := ""
       emphasized textSelf:cUrl            := "https://oauth.hm.bb.com.br"
    Self:cJson             := "grant_type=client_credentials&client_id="+Self:c_ClientId+"&client_secret="+Self:c_CliSecret+"&scope=cobranca.registro-boletos"
    Self:cMetodo        := "/oauth/token"
    Self:cRetAPI         := Nil
    Self:oRetJSON         := Nil
    Self:cStatusRet     := ''
Return()
/*/{Protheus.doc} mtdGetToken
    Metodo que solicita o token ao WS em REST do BB
    @author user
    @since 26/03/2020
    @version version
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
/*/
Method mtdGetToken( c_Fil, l_Job ) class clsToken
    Local l_Ret            := .F.
    Local c_AuxF        := cFilAnt

    Default l_Job        := .F.

    Self:c_ClientId        := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    Self:c_CliSecret    := "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
    // Monta os dados do header da request 
    aAdd( Self:aHeadStr, 'Content-Type: application/x-www-form-urlencoded')
    aAdd( Self:aHeadStr, 'Authorization: Basic ' + Encode64( ( Self:c_ClientId + ':' + Self:c_CliSecret ) ) )
    aAdd( Self:aHeadStr, 'Cache-Control: no-cache')

    // Realiza o request
    oObjREST := FWRest():New( Self:cUrl )
    oObjREST:setPath( Self:cMetodo)
    oObjREST:setPostParams( Self:cJson )
    If oObjREST:Post( Self:aHeadStr )
        Self:cRetAPI := oObjREST:GetResult()
        Self:cStatusRet := oObjREST:oResponseH:cStatusCode
    Else
        Self:cRetAPI := oObjREST:GetLastError()
        Self:cStatusRet := oObjREST:oResponseH:cStatusCode
    EndIf
    If( Alltrim( Self:cStatusRet ) = '200') //Ok
        //MsgInfo( Self:cRetAPI, "Erro" )

        // Deserealiza uma string no formato JSON
        FWJSonDeserialize( Self:cRetAPI, @Self:oRetJSON )
        Self:c_Token    := Self:oRetJSON:ACCESS_TOKEN
        l_Ret    := .T.
    Else
        If( l_Job )
            conout("RegBBAut :: " + Dtoc(Ddatabase) + " - " + Time() + 'Falha ao conectar: mtdGetToken' )    
        Else
            MsgAlert( Self:cRetAPI, "Falha ao conectar: mtdGetToken" )
        EndIf
        Self:c_Token:= ""
    EndIf
Return( l_Ret )