Docs/ Referência da API/ Autenticação da API

Autenticação da API

Autentique com a API REST do sh0 usando tokens JWT Bearer ou chaves API para acesso programático.

Obtendo um Token API

Para obter um token JWT, envie uma requisição POST ao endpoint de login com suas credenciais:

Terminal
curl -X POST https://your-server:9000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "your-password"
  }'

Se as credenciais forem válidas, a API retorna um token JWT e informações do usuário:

Response (200 OK)
{
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfYWJjMTIzIiwiZXhwIjoxNzE...",
    "user": {
      "id": "usr_abc123",
      "email": "[email protected]",
      "name": "Admin",
      "role": "admin"
    }
  }
}

Se a autenticação de dois fatores está habilitada, inclua o código TOTP:

Terminal
curl -X POST https://your-server:9000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "your-password",
    "totp_code": "123456"
  }'
Diagrama do fluxo de login da API mostrando troca de credenciais por token JWT

Autenticação por Token Bearer

Inclua o token JWT no header Authorization de cada requisição API:

Terminal
curl https://your-server:9000/api/apps \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

O token contém o ID do usuário, papel e tempo de expiração. sh0 valida a assinatura e expiração em cada requisição.

Tip
Armazene o token com segurança. Em scripts, use variáveis de ambiente em vez de codificar tokens diretamente:
Terminal
export SH0_TOKEN="eyJhbGciOiJIUzI1NiIs..."

curl https://your-server:9000/api/apps \
  -H "Authorization: Bearer $SH0_TOKEN"

Alternativa com Chave API

Para integrações de longa duração (pipelines CI/CD, scripts de monitoramento, webhooks), chaves API são mais práticas que tokens JWT porque não expiram.

Criando uma chave API:

  1. Navegue até Settings → API Keys no dashboard.
  2. Clique em Generate API Key.
  3. Insira um nome descritivo (ex.: "Pipeline CI/CD" ou "Monitoramento").
  4. Copie a chave imediatamente — ela é exibida apenas uma vez.
Painel de gerenciamento de chaves API com chaves geradas

Usando uma chave API:

Terminal
curl https://your-server:9000/api/apps \
  -H "X-API-Key: sh0_key_abc123def456"
Warning
Chaves API têm as mesmas permissões do usuário que as criou. Trate-as como senhas — nunca as commite no controle de versão ou compartilhe em texto simples.

Expiração & Atualização de Token

Tokens JWT são válidos por 30 dias por padrão. O tempo de expiração é codificado no payload do token.

Para atualizar um token expirando, chame o endpoint de refresh com seu token atual (ainda válido):

Terminal
curl -X POST https://your-server:9000/api/auth/refresh \
  -H "Authorization: Bearer YOUR_CURRENT_TOKEN"
Response (200 OK)
{
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIs...(new token)...",
    "expires_at": "2026-04-20T12:00:00Z"
  }
}

O dashboard atualiza tokens automaticamente antes de expirarem. Para integrações API, implemente lógica de atualização de token ou use chaves API para evitar problemas de expiração.

Note
Chaves API não expiram. Permanecem válidas até serem revogadas manualmente em Settings → API Keys.

Tokens CSRF para Requisições do Dashboard

Ao fazer requisições do dashboard (navegador), sh0 usa tokens CSRF para prevenir ataques de falsificação de requisição entre sites. Isso é tratado automaticamente pelo cliente API do dashboard.

Se você está construindo um frontend personalizado que autentica via cookies (em vez de tokens Bearer), você precisa incluir o token CSRF nas suas requisições:

Terminal
# Get a CSRF token
curl https://your-server:9000/api/auth/csrf-token \
  -H "Cookie: session=..."

# Include it in state-changing requests
curl -X POST https://your-server:9000/api/apps \
  -H "Cookie: session=..." \
  -H "X-CSRF-Token: csrf_token_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-app"}'
Tip
Autenticação via token Bearer (pelo header Authorization) não requer tokens CSRF. A proteção CSRF se aplica apenas a sessões baseadas em cookies.

Erros de Autenticação

Quando a autenticação falha, a API retorna uma resposta de erro estruturada:

401 Unauthorized
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or expired authentication token"
  }
}
403 Forbidden
{
  "error": {
    "code": "FORBIDDEN",
    "message": "You do not have permission to perform this action"
  }
}

Cenários de erro comuns:

StatusCódigoCausa
401UNAUTHORIZEDToken/chave API ausente, inválida ou expirada
401INVALID_CREDENTIALSE-mail ou senha incorretos no login
401TOTP_REQUIRED2FA está habilitado mas nenhum código TOTP foi fornecido
403FORBIDDENO papel do usuário não tem permissão para esta ação
429RATE_LIMITEDMuitas tentativas de login (5 por minuto por IP)
Resposta de erro de autenticação no explorador de API