• 0
YungNeegga

endpoint para requisição de novo access_token não existe 404

Question

recentemente me deparei com o problema de expiração do access_token e vi que poderia criar um novo através do refresh_token e que na documentação, mostra que a URL que deve ser feita a requisição é "https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=APP_ID&client_secret=SECRET_KEY&refresh_token=REFRESH_TOKEN", porém quando acesso ela, mesma com as credenciais corretas, o resultado é 404, que a página não existe, como proceder?

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 1

Consegui achar o erro com um amigo, de fato foi falta de atenção, a parte de atualização do token na documentação estava confusa, porque no assunto de Server Side do inicio para o meio do artigo ele pede para requisitar assim:

https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=ID&client_secret=SecretKey&refresh_token=REFRESH_TOKEN

sendo que o correto é o que esta depois do Fluxo Server Side no passo 4 requsição -c :

https://api.mercadolibre.com/oauth/token?grant_type=authorization_code&client_id=APP_ID&client_secret=SECRET_KEY&code=SERVER_GENERATED_AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

O que estava diferente era o grant_type no primeiro é refresh_token e o que funciona é authorization_code.

Como requisição é muito parecida eu meio que pulava a leitura completa dela.

Espero que ajuda quem passar por isso.

Share this post


Link to post
Share on other sites
  • 0

Isso acontece comigo algumas vezes . Eu fico tentando em intervalos aleatórios ate conseguir . Mas para seguir essa estratégia você deve tentar atualizar um pouco antes dele vencer (o que é ok , o meu eu começo 15 minutos antes . Raramente eu preciso repetir mais de duas vezes)

Share this post


Link to post
Share on other sites
  • 0

Uma empresa desse tamanho com uma API porca dessas, eu descobri que a requisição não é GET e sim POST, o engraçado  é que no exemplo eles dão uma URL com query string,  ai dá a entender que você envia por GET, consegui usando o SDK mesmo, mas  obrigado

Share this post


Link to post
Share on other sites
  • 0
1 hour ago, YungNeegga said:

Uma empresa desse tamanho com uma API porca dessas, eu descobri que a requisição não é GET e sim POST, o engraçado  é que no exemplo eles dão uma URL com query string,  ai dá a entender que você envia por GET, consegui usando o SDK mesmo, mas  obrigado

infelizmente tenho que concordar, o ideal é criar no seu sistema mecanismos para evitar que você perca o access_token (fazendo novas tentativas) quando o sistema do ML retornar erro na atualização do token (que a cada dia que passa está sendo mais frequente)

Share this post


Link to post
Share on other sites
  • 0
On 4/23/2018 at 1:21 AM, YungNeegga said:

recentemente me deparei com o problema de expiração do access_token e vi que poderia criar um novo através do refresh_token e que na documentação, mostra que a URL que deve ser feita a requisição é "https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=APP_ID&client_secret=SECRET_KEY&refresh_token=REFRESH_TOKEN", porém quando acesso ela, mesma com as credenciais corretas, o resultado é 404, que a página não existe, como proceder?

 

On 4/23/2018 at 9:16 AM, gbandoni said:

Isso acontece comigo algumas vezes . Eu fico tentando em intervalos aleatórios ate conseguir . Mas para seguir essa estratégia você deve tentar atualizar um pouco antes dele vencer (o que é ok , o meu eu começo 15 minutos antes . Raramente eu preciso repetir mais de duas vezes)

sendo que já fiz varias requisições e continua a dar 404

Share this post


Link to post
Share on other sites
  • 0
13 hours ago, rodrigojob said:

eu tenho um chron que roda de 5 em 5hs e faz a atualização. Não vejo erro ou mesmo este procedimento tem mais de 1 ano

Como o seu chron Rodrigo? Estou tentando rodar em nodeJs e já fiz varios testes, mas sempre continua retornando 400 ou 404:

https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=APP_ID&client_secret=SECRET_KEY&refresh_token=REFRESH_TOKEN

POST:

image.thumb.png.fe4dc18b1afe00ad71a46754e0b10ae2.png

GET:

{"message":"Error validating grant. Your authorization code or refresh token may be expired or it was already used.","error":"invalid_grant","status":400,"cause":[]}:

Share this post


Link to post
Share on other sites
  • 0

Eu tenho uma classe que faz todos os passos da autenticação.

Eu ia fazer a pergunta de uma coisa simples, mas já vi que você está informando os parâmetros corretos, porque na imagem os dados estão expostos!
Quase que o secret fica aberto, só faltaram 6 dígitos...
Com um pouquinho de esforço algum interessado em fazer besteira consegue acessar sua aplicação e fazer um estrago.

Mas o erro já está te indicando o caminho: Error validating grant. Your authorization code or refresh token may be expired or it was already used
(é, informar o erro ajuda os demais a descobrir o que falta. Ler o erro então, faz com que a pergunta nem precise ser feita)

Você melou o refresh_token. Você já o utilizou, mas no momento que o fez não gravou o novo refresh_token.
Neste caso deve é melhor refazer a autorização pedindo um novo código e depois o token.
 

Share this post


Link to post
Share on other sites
  • 0
On 7/6/2018 at 9:52 AM, Klebson Lopes said:

Como o seu chron Rodrigo? Estou tentando rodar em nodeJs e já fiz varios testes, mas sempre continua retornando 400 ou 404:

https://api.mercadolibre.com/oauth/token?grant_type=refresh_token&client_id=APP_ID&client_secret=SECRET_KEY&refresh_token=REFRESH_TOKEN

POST:

image.thumb.png.fe4dc18b1afe00ad71a46754e0b10ae2.png

GET:

{"message":"Error validating grant. Your authorization code or refresh token may be expired or it was already used.","error":"invalid_grant","status":400,"cause":[]}:

O refresh token só pode ser utilizado uma vez para renovar um token vencido (ou a vencer). Não precisa renovar antes da hora, só quando for usar mesmo, mas por precaução, crie uma rotina de validação do token por tempo e por uso. O pessoal do ML aparentemente permite usar o refresh token 2 vezes para evitar muitos erros, mas sempre que renovar um token, guarde todos os novos dados (access_token, refresh_token, expires_in), porque quando for renovar o token novamente você vai usar o novo refresh token e daí em diante.

 

Outro detalhe é que este processo é um POST e você deve enviar os dados no corpo da solicitação e não na URL, conforme já foi comentado acima. Use o POSTMAN para fazer testes e não o navegador.

Edited by Diogenes Lima

Share this post


Link to post
Share on other sites
  • 0
21 hours ago, rodrigojob said:

Eu tenho uma classe que faz todos os passos da autenticação.

Eu ia fazer a pergunta de uma coisa simples, mas já vi que você está informando os parâmetros corretos, porque na imagem os dados estão expostos!
Quase que o secret fica aberto, só faltaram 6 dígitos...
Com um pouquinho de esforço algum interessado em fazer besteira consegue acessar sua aplicação e fazer um estrago.

Mas o erro já está te indicando o caminho: Error validating grant. Your authorization code or refresh token may be expired or it was already used
(é, informar o erro ajuda os demais a descobrir o que falta. Ler o erro então, faz com que a pergunta nem precise ser feita)

Você melou o refresh_token. Você já o utilizou, mas no momento que o fez não gravou o novo refresh_token.
Neste caso deve é melhor refazer a autorização pedindo um novo código e depois o token.
 

E qual seria o fluxo correto? Fiz um novo app, requisitei um novo token, o guardei, depois o refresh_token também o guardei, e quando era necessário tentei atualizar o token por POST porem resultou isso:

{"message":"The grant type is invalid (refresh_token-authorization_code)","error":"invalid_grant","status":400,"cause":[]}

Concessão invalida.

Share this post


Link to post
Share on other sites
  • 0
16 hours ago, Klebson Lopes said:

E qual seria o fluxo correto? Fiz um novo app, requisitei um novo token, o guardei, depois o refresh_token também o guardei, e quando era necessário tentei atualizar o token por POST porem resultou isso:

{"message":"The grant type is invalid (refresh_token-authorization_code)","error":"invalid_grant","status":400,"cause":[]}

Concessão invalida.

Qual linguagem você está usando? Fez o teste pelo POSTMAN ou direto no seu código?

O ML tem várias SDKs que podem ser úteis. Mesmo que não use a SDK deles, às vezes é bom dar uma olhada no código fonte de alguma para ver a forma como é feito na linguagem X e aí você adapta na sua por exemplo.

Share this post


Link to post
Share on other sites
  • 0
23 hours ago, Klebson Lopes said:

E qual seria o fluxo correto? Fiz um novo app, requisitei um novo token, o guardei, depois o refresh_token também o guardei, e quando era necessário tentei atualizar o token por POST porem resultou isso:

{"message":"The grant type is invalid (refresh_token-authorization_code)","error":"invalid_grant","status":400,"cause":[]}

Concessão invalida.

refresh_token-authorization_code
isto não existe!
de onde tirou isto?

Share this post


Link to post
Share on other sites
  • 0

Klebson, é exatamente isso. Você informou isto como grant type no momento da requisição do refresh_token.
Veja seu código e encontrará este termo, que está errado, não existe. Corrija.
Aprenda a interpretar a resposta. Ler é diferente de interpretar e compreender.

Share this post


Link to post
Share on other sites
  • 0

Estou com o mesmo problema, bom quase.. No meu caso o erro é:

{"message":"The redirect_uri does not match the original","error":"invalid_grant","status":400,"cause":[]}

Estou fazendo a chamada assim:

ml.thumb.jpg.446b046f4bf75a4e0ded910a899e0c56.jpg

Edited by Linces Marques

Share this post


Link to post
Share on other sites
  • 0
11 hours ago, Linces Marques said:

Estou com o mesmo problema, bom quase.. No meu caso o erro é:

{"message":"The redirect_uri does not match the original","error":"invalid_grant","status":400,"cause":[]}

Estou fazendo a chamada assim:

ml.thumb.jpg.446b046f4bf75a4e0ded910a899e0c56.jpg

A url de redirect que voce informou no seu código é diferente da url que está cadastrada na conta do app , no mercado livre

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...