REST OAuth 2.0 Obter Token Google Cloud

Meu objetivo é utilizar o ADVPL para obter o token da google cloud, para utilizá-lo em operações de upload de arquivos para o cloud storage.

Por favor, algum colega poderia me instruir de como utilizar o ADVPL para obter o token da google cloud ?

Detalhe muito importante : Toda a estrutura sistema protheus 12.25 esta no ambiente TCloud Totvs

-- Para melhor analisarem disponibilizei:

01 Imagens da configuração na ferramenta postman (*1)

02 Meu código fonte para obter o token da google cloud --

Observação : No fonte disponibilizado eu consegui validar a url, mas o token não é retornado

Para que consigam testar devem configurar o ambiente google cloud storage

(*1) imagens getnewaccesstokenpostman0.png, getnewaccesstokenpostman1.png, getnewaccesstokenpostman2.png

Muito obrigado

#include "totvs.ch"
/*
  Programa principal para chamar a rotina getAcssTkn() e obter o token do google cloud storage relacionado ao
  escopo https://www.googleapis.com/auth/devstorage.full_control
*/
user function thbi_csv()
    //Get access token to use for file upload
    accssTkn := getAcssTkn()
return nil

/**/
static function getAcssTkn()
    Local aHeadOut := {}
    Local oathURL := "https://accounts.google.com/o/oauth2/auth"
    Local athURLPrm := ""
//    Local acssTknURL := "https://accounts.google.com/o/oauth2/token"
    Local stPth := ""
    Local clntId := "[client_id]"
    Local clntScrt := "[client_secret]"
    Local rdrctURI := "[redirect_uri]"
    Local scpAPIPrds := "https://www.googleapis.com/auth/devstorage.full_control"
    Local cnttTp := "application/x-www-form-urlencoded" //"application/json"  //"text/csv" //Content-type
    Local accptdHdr := "application/json" // "*/*"
    Local cnnctnHdr := "keep-alive"
    Local cAutent := ""
    Local cAutentErr := ""
    Local ojLogin := nil
    Local oRest := nil
    Local jAutenticacao := nil
    Local cToken := ""

    ojLogin := JSonObject():New()
    cBody := ojLogin:ToJson()

    //Params to complete url
    athURLPrm := "?client_id="+clntId+"&"
    athURLPrm += "response_type=code&"
    athURLPrm += "state=musa_id&"
    athURLPrm += "scope="+scpAPIPrds+"&"
    athURLPrm += "prompt=consent&"
    athURLPrm += "include_granted_scopes=true&"
    athURLPrm += "redirect_uri="+rdrctURI

    aAdd(aHeadOut,"Authorization: Basic "+clntId+":"+clntScrt)
    aAdd(aHeadOut,"Cache-Control: no-cache")
    aAdd(aHeadOut,"Content-Type: " + cnttTp)
    aAdd(aHeadOut,"Accept: " + accptdHdr)
    aAdd(aHeadOut,"Connection: " + cnnctnHdr)
    aAdd(aHeadOut,"User-Agent: Chrome/65.0 (compatible; Protheus " + GetBuild() + ")")

    //Validate url
    oRest := FWRest():New(oathURL+athURLPrm)
    oRest:SetPath(stPth)
    oRest:SetPostParams(cBody)

    //Validate url and header
    if (oRest:Post(aHeadOut))
        //ConOut("Post: " + oRest:GetResult())
        cAutent := oRest:GetResult()
    else
        //ConOut("Post: " + oRest:GetLastError())
        cAutentErr := oRest:GetResult()
        cAutent := oRest:GetLastError()
        Alert("Post Error: " + cAutent)
    endif

    jAutenticacao := JSonObject():New()
    jAutenticacao:FromJson(cAutent)
    cToken := jAutenticacao['access_token']
return(cToken)
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags rest oauth google token api json jsonobject bearer ou faça a sua própria pergunta.