Cenário de sempre: o dono da loja trocou de celular, restaurou o backup, e o Google Authenticator veio sem as contas. O admin pede o código de seis dígitos, ninguém tem o código, e a loja está com pedido preso esperando alguém entrar.
A internet vai te mandar apagar linha do banco ou desligar o módulo. As duas saídas funcionam e as duas deixam sujeira. O Magento tem comando pronto para isso desde que o 2FA virou obrigatório, no 2.4.0.
Primeiro, o código do provider
O comando de reset pede o usuário e o código do provider, não o nome bonito que aparece na tela. Para listar:
bin/magento security:tfa:providersA saída traz os quatro que vêm no módulo:
| Código | Na tela |
|---|---|
google | Google Authenticator |
duo_security | Duo Security |
authy | Authy |
u2fkey | U2F Devices |
Errar aqui é comum: muita gente digita duo e leva um erro de provider desconhecido. É duo_security, com underline.
O comando que resolve
Um usuário, um provider:
bin/magento security:tfa:reset roger googleA resposta é Provider Google Authenticator has been reset for user roger. O que aconteceu por dentro: o Magento zerou a configuração daquele provider para aquele usuário, e só dele. Os outros administradores continuam com o 2FA deles intacto, e os outros providers desse mesmo usuário também.
No próximo login o admin mostra a tela de configuração de novo, com QR code novo. Nenhum passo extra, nenhum cache para limpar.
Se você nem lembra o nome de usuário, ele sai do banco em uma linha:
SELECT username, email FROM admin_user WHERE is_active = 1; Quando não dá para ler o QR code
Acontece em servidor de homologação, em pipeline de teste ou quando você precisa deixar o mesmo segredo em várias máquinas. Existe um terceiro comando que grava o segredo direto:
bin/magento security:tfa:google:set-secret roger JBSWY3DPEHPK3PXPO segredo tem que estar em base32, que é o formato que o Google Authenticator entende. O comando grava e já marca o provider como ativo para aquele usuário, então ele nem passa pela tela de configuração — vai direto para a pergunta do código.
Vale o aviso: segredo que passa pela linha de comando fica no histórico do shell. Em produção, prefira o reset e o QR code.
O que eu não faria
Apagar linha em tfa_user_config. Funciona, mas a tabela guarda em encoded_providers e encoded_config tudo que o usuário tinha registrado, criptografado com a crypt key da loja. Você joga fora mais do que precisava, e num servidor onde nem sempre há acesso ao MySQL. O comando faz o mesmo serviço, por provider.
Rodar module:disable Magento_TwoFactorAuth. É a resposta mais comum em fórum e a pior de todas: derruba o segundo fator da loja inteira, não só do seu usuário, e quase sempre alguém esquece de religar. Painel de admin exposto é a porta de entrada favorita de ataque de força bruta.
Um caso diferente merece outra solução: se o problema é que o admin foi configurado só com Duo ou Authy e o serviço externo caiu, o que trava não é o usuário, é a política. Aí o conserto é trocar o provider aceito:
bin/magento config:set twofactorauth/general/force_providers google
bin/magento cache:clean configDepois de entrar, revise a política com calma. O que vale ligar num admin exposto está no guia de segurança e hardening do Magento 2.
Perguntas rápidas
Preciso de acesso ao banco para rodar esses comandos?
Não. Basta SSH no servidor e permissão para rodar o bin/magento com o usuário dono dos arquivos. O comando acessa o banco pelas credenciais que já estão no app/etc/env.php.
O reset derruba o 2FA dos outros administradores?
Não. O comando recebe um nome de usuário e um código de provider, e só mexe nessa combinação. Os demais usuários continuam exatamente como estavam.
Esses comandos existem no Magento Open Source ou só no Adobe Commerce?
Existem nos dois. Eles vêm no módulo Magento_TwoFactorAuth, que faz parte do security-package instalado por padrão desde o 2.4.0.
Pra conferir na fonte
- TfaReset.php — comando security:tfa:reset — GitHub
- GoogleSecret.php — comando security:tfa:google:set-secret — GitHub
- TwoFactorAuth etc/di.xml — lista de providers — GitHub
- Two-Factor Authentication — configuração — Adobe Experience League