Passo 2.1 — access_token, refresh_token e customer_token: qual é qual

Modificado em Sex, 23 Out na (o) 10:02 AM

A API da Engage usa três tokens com nomes parecidos — e trocar um pelo outro é a causa mais comum de erro 401 no primeiro dia de integração. Este artigo explica o papel de cada um, como renovar o acesso sem repetir o login e por que um login pode derrubar outro.

Neste artigo

  1. Antes de começar
  2. Os três tokens
  3. Renovar o acesso
  4. Saber se o token ainda vale
  5. Por que um login derruba outro
  6. O customer_token em detalhe
  7. No Postman
  8. Problemas comuns

Antes de começar

Os três tokens

access_tokenrefresh_tokencustomer_token
Para que serveAutentica as chamadas da sua integraçãoRenova o acesso sem reenviar a senhaIdentifica a instância — não autentica ninguém
De onde vemResposta do POST /authResposta do POST /authGET /{customer_id}/infos/token
Onde é enviadoCabeçalho Authorization: BearerCorpo do POST /auth, com grant_type=refresh_tokenQuery string ?customerToken=
Muda?Sim, a cada login ou renovaçãoSim, a cada renovaçãoNão, é fixo da instância

Cuidado

O customer_token não substitui o access_token. Enviá-lo no cabeçalho Authorization resulta em 401 — e o inverso também: o access_token não substitui o customerToken da query string.

Renovar o acesso

Há duas formas de manter a integração autenticada. Escolha conforme a resposta do seu login.

Forma 1 — Repetir o login. Quando o token expira, faça de novo o POST /auth com grant_type=password. É o cenário mais comum em integração servidor a servidor, e é perfeitamente aceitável: uma rotina que roda de hora em hora pode simplesmente autenticar a cada execução.

Forma 2 — Usar o refresh_token. Só está disponível se a resposta do login trouxer um refresh_token — isso depende de como a aplicação foi registrada. Serve para quem precisa manter a sessão viva sem guardar a senha.

1Envie o refresh_token

POST https://sandbox.engage.bz/api/v1/auth
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token={refresh_token}&customer_id={customer_id}&client_id={client_id}
CampoObrigatórioValorObservação
grant_typeSimrefresh_tokenFixo
refresh_tokenSimo recebido no login anteriorSempre o mais recente
customer_idSimo seu customer_idMesma instância do login
client_idSimo seu client_idPrecisa ser o mesmo que emitiu o token

2Guarde o novo refresh_token

A resposta tem o mesmo formato do login: um novo access_token, o expires_in e um novo refresh_token.

Atenção

O refresh_token é de uso único. Cada renovação queima o token usado e devolve outro. Se a sua integração guardar sempre o primeiro, a segunda renovação falha — grave o refresh_token novo a cada resposta.

Saber se o token ainda vale

Para conferir sem fazer uma chamada de negócio:

GET https://sandbox.engage.bz/api/v1/{customer_id}/login/authenticated
Authorization: Bearer {access_token}

A resposta é 200 quando o token é válido e 401 quando não é. Útil para separar "o token expirou" de outros problemas.

Por que um login derruba outro

Gerar um token novo derruba o anterior. A regra vale para a mesma combinação de usuário, instância, client_id e device: dois processos seus autenticando com o mesmo usuário e o mesmo device vão se derrubar em rodízio.

Dica

O usuário de serviço da integração é a exceção — logins de integração permitem sessões simultâneas e não sofrem essa invalidação. É mais um motivo para nunca usar o login de uma pessoa. Para esses usuários, a resposta do login também não traz os campos key, is_blocked e is_admin; é o comportamento esperado.

O customer_token em detalhe

Ele é obtido sem autenticação:

GET https://sandbox.engage.bz/api/v1/{customer_id}/infos/token
{
  "result": {
    "customer_id": "meucliente",
    "name": "Meu Cliente",
    "status": true,
    "token": "{customer_token}",
    "platform_url": "https://meucliente.engage.bz"
  }
}

O campo token é o customer_token: 32 caracteres que não mudam. Obtenha uma vez e guarde junto da configuração da sua integração.

  • HTTP 200 com {"result": null} não é sucesso. É a resposta quando o customer_id não existe ou a instância está inativa. Trate esse caso e nunca grave null como customer_token.
  • Continue enviando ?customerToken= nos endpoints que o pedem, como os de usuários e grupos. É o contrato publicado da API.
  • O customer_token não é um segredo forte. Ele identifica a instância, é devolvido por um endpoint público e, por ir na URL, aparece em logs de servidor e de proxy. Trate com higiene — não versione, não registre em log —, mas não construa controle de acesso em cima dele.

Importante

O segredo que protege a integração é o client_secret. Ele nunca vai para versionamento, log, código de navegador ou e-mail.

No Postman

A pasta 02 - Autenticação traz uma chamada para cada situação deste artigo:

RequestPara que serve
Renovar access_token (grant_type=refresh_token)Troca o refresh_token guardado por um par novo de tokens
Verificar se o token ainda é válidoResponde 200 se o access_token ainda vale, 401 se não
Obter customer_token da instânciaBusca o customer_token e salva na variável customerToken — sem autenticação

Pasta 02 - Autenticação aberta no Postman, com os quatro requests na ordem de uso

Resposta do request Obter customer_token da instância. O valor do token está oculto.

Problemas comuns

O que apareceCausa provávelO que fazer
invalid_grant na renovaçãorefresh_token já usado, expirado ou desativadoFaça um novo POST /auth com grant_type=password
invalid_clientId — Refresh token is issued to a different clientIdRenovação com client_id diferente do loginUse o mesmo client_id nos dois
invalid_customer_idcustomer_id errado, vazio ou instância inativaConfira o valor do customer_id
HTTP 401 em /login/authenticatedToken expirado ou derrubado por um login mais recenteGere um novo token
HTTP 401 logo depois de gerar o tokenCabeçalho mal formado ou customer_id da rota diferente do tokenUse exatamente Authorization: Bearer {access_token} e a mesma instância na rota
{"result": null} em /infos/tokencustomer_id incorreto ou instância inativaNão é erro de credencial: corrija o customer_id

A pasta 98 - Erros comuns da coleção reúne o catálogo completo de erros da API e três chamadas de diagnóstico.

Próximo passo

Com a autenticação dominada, comece a cadastrar usuários em Integração de usuários.

Precisa de ajuda?

Escreva para meajuda@engage.bz informando o customer_id, o ambiente e a mensagem de erro completa. Nunca envie senhas, tokens ou o client_secret por e-mail.

Este artigo foi útil?

Que bom!

Obrigado pelo seu feedback

Desculpe! Não conseguimos ajudar você

Obrigado pelo seu feedback

Deixe-nos saber como podemos melhorar este artigo!

Selecione pelo menos um dos motivos
A verificação do CAPTCHA é obrigatória.

Feedback enviado

Agradecemos seu esforço e tentaremos corrigir o artigo