Magento

Token de integração da API do Magento 2: gerar e usar no header Bearer

Você chamou GET /rest/V1/products e voltou 401 com The consumer isn't authorized to access %resources (em loja mais velha a mensagem é Consumer is not authorized to access %resources). O token existe, o curl está escrito certo, e mesmo assim o Magento nega. Faltam duas coisas: ativar a integração e marcar os recursos que ela pode acessar.

Criar e ativar a integração

No admin, System > Extensions > Integrations > Add New Integration. Preencha o nome e, na aba API, escolha o Resource Access. Marcar All resolve na hora, mas o certo é marcar só o que o cliente vai consumir. Salve, volte na listagem e clique em Activate, depois Allow: é só nesse popup que o Access Token aparece.

Se você marcou os recursos e o 401 continua, o motivo costuma ser este — da 2.4.4 em diante o token de integração só vale como Bearer com a flag ligada:

bin/magento config:set oauth/consumer/enable_integration_as_bearer 1
bin/magento cache:flush

curl -s 'https://sualoja.com.br/rest/V1/products?searchCriteria[pageSize]=1' 
  -H 'Authorization: Bearer SEU_ACCESS_TOKEN' 
  -H 'Content-Type: application/json'

Quando você quer um token de admin temporário

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

A resposta é a string do token entre aspas e vale 4 horas por padrão (Stores > Configuration > Services > OAuth > Access Token Expiration). Com o 2FA ligado, que é o padrão desde a 2.4, esse endpoint devolve erro: o caminho é autenticar no endpoint do seu provedor, tipo POST /V1/tfa/provider/google/authenticate mandando username, password e otp. Não desative o Magento_TwoFactorAuth em produção só pra encurtar isso.

Pra robô e ERP, fique no token de integração: ele não expira, tem ACL própria e você revoga clicando em Deactivate, sem trocar a senha de ninguém.

Post Recentes

Criar swapfile no Ubuntu: parar o OOM killer de matar o MySQL

VPS de 2 GB onde o mysqld morre de madrugada e o site volta com erro de conexão. Como confirmar…

5 horas atrás

Grupos nomeados no preg_match: pare de contar índice de $matches

Regex com cinco parênteses e ninguém lembra se a data é $matches[2] ou $matches[3]. Nomeie os grupos e leia o…

19 horas atrás

Rate limit no wp-login.php com nginx: barrar força bruta antes do PHP

Bots batendo centenas de POST por minuto no login derrubam a CPU. Configure limit_req_zone no nginx e devolva 429 antes…

2 dias atrás

Anonimizar IP no nginx: mascarar o último octeto do log para a LGPD

Seu access.log guarda o IP inteiro dos visitantes há meses sem necessidade. Mascare o último octeto com map e log_format…

3 dias atrás

Prompt injection em campo de usuário: isole a observação do pedido

A observação do pedido chegou com ordem embutida para gerar cupom. Delimite o texto do cliente e trate a resposta…

3 dias atrás

Preço promocional em massa no WooCommerce: agendar a Black Friday pelo WP-CLI

Um CSV com SKU e preço, um wp eval-file que agenda início e fim da promoção guardando o estado anterior,…

3 dias atrás