Skip to content

🔒 Dashboard Security Guide

Configuração de Acesso Seguro

O dashboard possui duas camadas de segurança que funcionam de forma independente:

1️⃣ IP Whitelist (Recomendado para uso fixo)

2️⃣ API Key (Fallback para acesso móvel)


🚀 Setup Rápido

Opção A: Apenas API Key (Mais Simples)

Já configurado! Sua API key está no .env.local:

DASHBOARD_API_KEY=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2

Como usar:

  1. Em localhost (desenvolvimento):
  2. Funciona automaticamente sem key
  3. Acesse: http://localhost:3000/dashboard

  4. Em produção (Vercel):

  5. Adicione ?apiKey=SUA_KEY na URL
  6. Exemplo: https://codeslick.dev/dashboard?apiKey=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2

  7. Usando header (mais seguro):

    curl https://codeslick.dev/api/metrics \
      -H "x-dashboard-api-key: c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2"
    


Opção B: IP Whitelist + API Key (Mais Seguro)

1. Descubra seu IP público:

curl https://api.ipify.org

Ou visite: https://www.whatismyip.com/

2. Adicione ao .env.local:

# Se tiver apenas 1 IP
DASHBOARD_ALLOWED_IPS=203.0.113.45

# Se tiver múltiplos IPs (casa + trabalho)
DASHBOARD_ALLOWED_IPS=203.0.113.45,198.51.100.23

3. Teste localmente:

# Reinicie o servidor
npm run dev

# Acesse o dashboard
open http://localhost:3000/dashboard

4. Deploy no Vercel:

Adicione as variáveis de ambiente no Vercel: 1. Vá para: https://vercel.com/seu-projeto/settings/environment-variables 2. Adicione: - DASHBOARD_API_KEY = c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2 - DASHBOARD_ALLOWED_IPS = seu.ip.aqui


🔐 Segurança em Produção

✅ Boas Práticas

  1. Nunca comite .env.local no Git (já está no .gitignore)
  2. Guarde a API key num gestor de passwords (1Password, Bitwarden)
  3. Use IP Whitelist sempre que possível
  4. Rotacione a key periodicamente (a cada 6 meses)

🔄 Como Gerar Nova API Key

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Copie o output e atualize: - .env.local (local) - Vercel Environment Variables (produção)


🌐 Cenários de Uso

Cenário 1: Apenas você, IP fixo (casa/escritório)

DASHBOARD_ALLOWED_IPS=seu.ip.fixo
DASHBOARD_API_KEY=  # Pode deixar vazio
✅ Mais seguro ✅ Sem necessidade de lembrar keys ❌ Não funciona em outras redes

Cenário 2: Acesso de qualquer lugar

DASHBOARD_ALLOWED_IPS=  # Vazio
DASHBOARD_API_KEY=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2
✅ Funciona em qualquer lugar ✅ Simples de usar ⚠️ Precisa guardar a key

Cenário 3: Máxima Segurança (Recomendado)

DASHBOARD_ALLOWED_IPS=ip.casa,ip.trabalho
DASHBOARD_API_KEY=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2
✅ Acesso automático em IPs conhecidos ✅ Fallback com key para outras redes ✅ Melhor de ambos os mundos


🛠️ Troubleshooting

Erro: "Unauthorized" no Dashboard

1. Verifique se o .env.local tem a key:

grep DASHBOARD_API_KEY .env.local

2. Verifique seu IP atual:

curl https://api.ipify.org

3. Teste com a API key na URL:

http://localhost:3000/dashboard?apiKey=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2

4. Verifique os logs do servidor: O erro mostrará seu IP atual e o motivo da rejeição.

Erro: "Dashboard security not configured"

Isso significa que: - DASHBOARD_API_KEY está vazio - DASHBOARD_ALLOWED_IPS está vazio - E você está em produção (não em development)

Solução: Adicione pelo menos uma das variáveis.


📊 Como Funciona (Técnico)

Fluxo de Autenticação

Request → Dashboard Auth Middleware
         Check #1: IP Whitelist
            ✅ IP permitido? → Allow
            ❌ IP não permitido → Check #2
         Check #2: API Key
            ✅ Key válida? → Allow
            ❌ Key inválida → Deny (401)

Headers Suportados

O middleware verifica IP nesta ordem: 1. x-forwarded-for (Vercel, Cloudflare) 2. x-real-ip (Nginx) 3. cf-connecting-ip (Cloudflare)

Modo Development

Em NODE_ENV=development, o dashboard sempre permite acesso de: - 127.0.0.1 - ::1 - localhost

Mesmo sem configurar segurança.


🔑 Sua API Key Atual

DASHBOARD_API_KEY=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2

⚠️ IMPORTANTE: Esta key dá acesso total ao dashboard. Guarde com segurança!

Bookmark sugerido (salve no browser):

https://codeslick.dev/dashboard?apiKey=c9fa6315e5a9569a49652f8a882831529f2e6a5ca127d1b6fb7177249322deb2


📝 Changelog

2025-10-05

  • ✅ Implementado IP Whitelist
  • ✅ Implementado API Key authentication
  • ✅ Suporte para múltiplos IPs
  • ✅ Fallback automático (IP → Key)
  • ✅ Auto-allow localhost em dev
  • ✅ Gerada API key segura (256-bit)

🔒 Dashboard protegido sem dependência de Clerk!