Uso de API autenticacao de token

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Uso de API autenticacao de token

Mensagem por Alexandre Silva »

pessoal
Porque com as mesmas chaves e cofiguracoes, funciona no Postman
e nao funciona no aplicativo ?

retorna
{
"error":"invalid_request",
"error_description":"Missing or duplicate parameters"
}

Código: Selecionar todos

*-------------------------
#include 'inkey.ch'
function main()
local getlist:={},oData:=hb_Hash(),cResposta,oJson,vteste
local curl:='https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token'
cls
oData["client_id"]:="b11817f1-36c5-4119-b0a8-d95e8c960e1b"
oData["client_secret"]:="f3b469c2-88a0-4eca-9116-fdc92d936e17"
oData["scope"]:="dclogg-internal"
oData["grant_type"]:="client_credentials"

cResposta:=mandaserv('POST',cUrl, oData)
alert(cresposta)
if at('access_token',cresposta)>0
   varqret:='token.txt'
   HB_MemoWrit(varqret,cresposta)
else
   varqret:='errolog.txt'
   HB_MemoWrit(varqret,cresposta)
   alert('Problemas ! Nao gerou novo login')
endif
retu

*------------------------------
* manda requisicao ao servidor
*------------------------------
function mandaserv(vmetodo,cUrl, oData)
local oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl, .F. )
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
return cResposta
Anexos
postman.jpg
postman.jpg (265.08 KiB) Exibido 213 vezes
POSTEF.PRG
(1.22 KiB) Baixado 11 vezes
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4675
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 4 vezes
Contato:

Re: Uso de API autenticacao de token

Mensagem por rochinha »

Amiguinhos,

Você está usando:

Código: Selecionar todos

oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
Quando deveria fazer:

Código: Selecionar todos

oWeb :SetRequestHeader( "Content-Type", "application/json")
oWeb :Send( hb_JsonEncode( oData ) )
Você expôs suas client_id e client_secret e este vazamento permite a qualquer um disparar comandos para API e travar o seu acesso.

Nunca divulgue estes valores desta forma. Troque-os imediatamente e volte a consumir sua API.
OPS! LINK QUEBRADO? Infelizmente links para www.pctoledo.COM.BR irão quebrar pois o Forum se foi, assim como nosso célebre Irmão de Bits Toledo. Ainda assim me ENVIE seu email com link do tópico encontrado na Web para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url] e tentarei lembrar do que se tratava. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por Alexandre Silva »

Obrigado
mas nao funcionou..
Mais alguma ideia ?

Quanto a exposicao dos dados, eu sei, sao dados de testes apenas, mas tambem vou mudar
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4675
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 4 vezes
Contato:

Re: Uso de API autenticacao de token

Mensagem por rochinha »

Amiguinhos,

O Postman dá opções de visualização de comandos cUrl, C#, VB, PHP, etc?

Mostre o cUrl desta requisição para termos idéia.
OPS! LINK QUEBRADO? Infelizmente links para www.pctoledo.COM.BR irão quebrar pois o Forum se foi, assim como nosso célebre Irmão de Bits Toledo. Ainda assim me ENVIE seu email com link do tópico encontrado na Web para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url] e tentarei lembrar do que se tratava. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por Alexandre Silva »

segue

Código: Selecionar todos

curl --location 'https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b' \
--data-urlencode 'client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17' \
--data-urlencode 'scope=dclogg-internal' \
--data-urlencode 'grant_type=client_credentials'
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20463
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por JoséQuintas »

Erro: parâmetros inválidos ou desconhecidos

Se tá tudo lá e não aceitou, provavelmente não está do jeito que deveria.

Sei lá... num chute...
urlencode equivalente a parâmetros passados no ENDEREÇO(URL),
o tradicional endereço?parametro_1&parametro_2&parametro_n
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por Alexandre Silva »

Alguem pode fazer a gentileza de compilar pra ver se funciona ?
Pra eu saber que nao é minha versao de windows ou minha versao de harbour. (3.0.2 console)
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20463
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por JoséQuintas »

meu chute estava certo, assim funciona:

Código: Selecionar todos

*-------------------------
#include 'inkey.ch'

FUNCTION main()

   LOCAL oData,cResposta,varqret
   LOCAL curl:='https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token'

   CLS
   oData := "?client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b"
   oData += "&client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17"
   oData += "&scope=dclogg-internal"
   oData += "&grant_type=client_credentials"

   cResposta:=mandaserv('POST',cUrl, oData)
   Alert(cresposta)
   IF at('access_token',cresposta)>0
      varqret:='token.txt'
      HB_MemoWrit(varqret,cresposta)
   ELSE
      varqret:='errolog.txt'
      HB_MemoWrit(varqret,cresposta)
      Alert('Problemas ! Nao gerou novo login')
   ENDIF

   RETURN Nil

   *------------------------------
   * manda requisicao ao servidor
   *------------------------------

FUNCTION mandaserv(vmetodo,cUrl, oData)

   LOCAL oWeb, cResposta

   oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oWeb :Open(vmetodo, cUrl + oData, .F. )
   oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
   oWeb :Send("") //  hb_JsonEncode( oData ) )
   oWeb :WaitForResponse( 300 )
   cResposta := oWeb:ResponseBody()

   RETURN cResposta
d:\temp>type token.txt
{
"access_token":"c39def9b-7947-440f-8280-70d4ffb7b2bb",
"token_type":"Bearer",
"expires_in":1800,
"scope":"dclogg-internal"
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por Alexandre Silva »

Voce mudou alguma coisa ?
como vc compilou ? eu uso harbour 3.2 console
sera que falta algo na minha compilacao ?
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20463
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por JoséQuintas »

Com certeza alterei.
O que era hash array/json virou string

Código: Selecionar todos

   oData := "?client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b"
   oData += "&client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17"
   oData += "&scope=dclogg-internal"
   oData += "&grant_type=client_credentials"
   
Foi acrescentado no endereço, sem enviar nada.

Código: Selecionar todos

FUNCTION mandaserv(vmetodo,cUrl, oData)

   LOCAL oWeb, cResposta

   oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oWeb :Open(vmetodo, cUrl + oData, .F. ) // <==== soma no endereço 
   oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
   oWeb :Send("")        //  hb_JsonEncode( oData ) )   <=== envia vazio o outro tá comentado
   oWeb :WaitForResponse( 300 )
   cResposta := oWeb:ResponseBody()

   RETURN cResposta
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 382
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por Alexandre Silva »

Blz, deu certo,
Muito obrigado

Mas ai como fica quando o arquivo tiver sub niveis ?
Com hb_hash da pra montar os sub niveis
Editado pela última vez por Alexandre Silva em 26 Mar 2026 13:54, em um total de 2 vezes.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20463
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Re: Uso de API autenticacao de token

Mensagem por JoséQuintas »

urlencode é parâmetros no endereço.
se for pra ser json, vai json, igual fez antes.
Vai ter que identificar, conforme manual do webservice e/ou esse programa de teste, se é de um jeito, de outro, ou os dois juntos.

É como eu disse:
cada webservice, ou cada etapa de um webservice, pode ser de um jeito diferente.
Talvez dê pra usar IA, colocando os comandos curl, e pedir pra traduzir pra xmlhttp.
No Windows tem co-pilot grátis, no google também mostra lá a IA grátis, do próprio google, ou chatgpt.
Dá pra tentar um desses como ajuda.
No fórum, se alguém já fez pra esse mesmo webservice, poderia ajudar mais diretamente.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder