Integrações

Token de integração parou de funcionar no Magento 2.4.4

Nada quebrou no seu ERP. O Magento é que deixou de aceitar token eterno como chave de API, e não avisou ninguém direito.

Por Roger Takemiya · Publicado em · 5 min de leitura

A cena é sempre a mesma. A loja sobe de versão num sábado, tudo parece bem, e na segunda o ERP não consegue mais puxar pedido. O middleware devolve 401 em todas as chamadas, e o token continua lá, ativo, no admin do Magento.

Não é token vencido nem ACL errada. O Magento 2.4.4 mudou a regra: token de integração deixou de valer como chave de autenticação por conta própria, porque um token que nunca expira é um problema de segurança grande demais para ficar ligado por padrão.

Confirme que o problema é esse

Pegue o token da integração e bata direto num endpoint qualquer:

curl -s -i -H "Authorization: Bearer SEU_TOKEN" \
  https://sualoja.com.br/rest/V1/orders/1

Se voltar 401 com a mensagem The consumer isn't authorized to access seguida do nome do recurso, é exatamente isso. Repare que a mensagem fala em autorização, e é isso que joga todo mundo para o caminho errado: a pessoa passa a tarde mexendo em ACL da integração e o problema nunca esteve ali.

Teste de controle: se a mesma chamada funciona com um token de admin recém-gerado, está provado. O que quebrou foi o tipo de token, não a permissão.

Saída 1: religar o comportamento antigo

O Magento deixou a porta aberta. Um comando e a loja volta a aceitar token de integração como Bearer:

php bin/magento config:set oauth/consumer/enable_integration_as_bearer 1
php bin/magento cache:clean config

Pelo admin é Stores > Configuration > Services > OAuth > Consumer Settings, na opção "Allow OAuth Access Tokens to be used as standalone Bearer tokens".

Funciona na hora e é o que a maioria faz. Só que eu não deixo isso ligado para sempre em produção, e o motivo é simples: esse token não expira nunca. Ele costuma estar no arquivo de configuração de um middleware, num repositório, às vezes num print de grupo de WhatsApp. Vazou, o atacante tem acesso permanente à API até alguém revogar na mão.

Uso como ponte, com prazo definido: liga, o ERP volta a rodar, e a equipe tem duas semanas para migrar.

Saída 2: migrar para o token de admin

É o caminho que o Magento quer. Você troca usuário e senha por um token com validade:

curl -s -X POST https://sualoja.com.br/rest/V1/integration/admin/token \
  -H "Content-Type: application/json" \
  -d '{"username":"integracao_erp","password":"senha_forte"}'

A resposta é o token entre aspas. Ele vale 4 horas por padrão, controlado em oauth/access_token_lifetime/admin. O do cliente vale 1 hora. Deixar o campo vazio faz o token não expirar nunca, o que anula o ganho — não faça isso.

Duas coisas para combinar com quem cuida do middleware. Primeira: o código precisa renovar o token antes de vencer, ou tratar o 401 pedindo um novo e repetindo a chamada. Segunda: crie um usuário de admin exclusivo para a integração, com uma função (role) que libere só os recursos necessários. Usuário de pessoa física em integração é receita de dor de cabeça no dia da demissão.

Se esse usuário tiver 2FA ligado, o endpoint devolve erro pedindo o código. Nesse caso existe um endpoint próprio para autenticação com 2FA, e vale usar em vez de desligar a proteção do admin inteiro.

Perguntas rápidas

Ligar o enable_integration_as_bearer é inseguro mesmo?

O risco é o token não expirar. Enquanto ele existir, quem tiver o valor tem acesso à API com as permissões daquela integração. Se você ligar, trate o token como senha de banco: fora do repositório e com revogação combinada.

Qual a diferença entre token de integração e token de admin?

O de integração é gerado no admin, em System > Integrations, e não expira. O de admin sai do endpoint integration/admin/token a partir de usuário e senha e vale 4 horas por padrão.

Isso afeta GraphQL também?

O GraphQL usa token de cliente para operações de loja e token de admin para as administrativas. A mudança do 2.4.4 é sobre o token de integração usado como Bearer, então o efeito prático aparece principalmente nas chamadas REST feitas por ERP e middleware.

Pra conferir na fonte

  1. Token-based authentication — Adobe Developer
  2. Magento 2.4.4 Rest API: Workaround for integration token — Adyen no GitHub
  3. Magento_Integration: etc/adminhtml/system.xml — Magento no GitHub
  4. OAuth configuration — Adobe Experience League

api token rest

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui