Pular para o conteúdo principal

Autenticação da gestão

Login por e-mail e senha. É o único perfil com auto-registro público.

EndpointO que faz
POST /v1/auth/management/registerAuto-registro público, protegido por Cloudflare Turnstile. Precisa confirmar e-mail antes de logar.
POST /v1/auth/management/loginLogin com e-mail/senha. Seta wallet_management_access_token, wallet_management_refresh_token (HttpOnly) e wallet_management_csrf_token. Rejeita credencial de operador mesmo que válida.
POST /v1/auth/management/refreshRotaciona o refresh token. Aceita o token no corpo, no header X-Refresh-Token ou no cookie — nessa ordem de prioridade. Re-emite os três cookies.
POST /v1/auth/management/logoutRevoga a sessão atual e limpa os três cookies.

Exemplo: login

curl -X POST http://127.0.0.1:8787/v1/auth/management/login \
-H "Content-Type: application/json" \
-d '{ "email": "gestor@example.com", "password": "senha-forte" }'
POST /v1/auth/management/login { email, password }

recebe body com accessToken/refreshToken
+ Set-Cookie: wallet_management_access_token, wallet_management_refresh_token, wallet_management_csrf_token

requisições seguintes: o browser manda os cookies sozinho

requisição que muda estado (POST/PATCH/DELETE): manda também
X-CSRF-Token: <valor lido do cookie wallet_management_csrf_token>

Cliente que prefere Bearer token pode simplesmente ignorar os cookies e usar o accessToken do corpo da resposta no header Authorization: Bearer ... — os dois modos funcionam ao mesmo tempo, sem conflito.

O que o JWT de gestão contém

{
"sub": "supabase-auth-user-id",
"principal_type": "management",
"app_user_id": "global-business-user-id",
"session_id": "global-session-id",
"exp": 1784000000
}

Nunca contém organização, papel ou permissão — isso é resolvido a cada chamada, consultando app.organization_members pelo app_user_id. Um gestor pode pertencer a várias organizações com papéis diferentes em cada uma; o token não fixa isso.