Autenticação¶
O proxbox-api usa autenticação por chave API armazenada em banco de dados. Todas as chaves API são armazenadas no banco de dados SQLite com hash bcrypt. Não há autenticação por variável de ambiente — todo gerenciamento de chaves acontece através dos endpoints da API.
Fluxo de Bootstrap¶
Quando o backend inicia com um banco de dados vazio, ele retorna needs_bootstrap: true do endpoint de status:
```bash curl http://localhost:8800/auth/bootstrap-status
{"needs_bootstrap": true, "has_db_keys": false}¶
```
Registro da Primeira Chave¶
A primeira chave API pode ser registrada sem autenticação (modo bootstrap):
```bash curl -X POST http://localhost:8800/auth/register-key \ -H "Content-Type: application/json" \ -d '{"api_key": "sua-chave-api-segura-com-pelo-menos-32-caracteres", "label": "chave-bootstrap"}'
{"detail": "API key registered."}¶
```
Uma vez que uma chave existe, chamadas subsequentes para /auth/register-key retornam 409 Conflict.
Integração com Plugin NetBox¶
Quando você salva um FastAPIEndpoint no NetBox, o plugin automaticamente:
- Gera um token seguro de 64 caracteres
- Chama
/auth/bootstrap-statuspara verificar se registro é necessário - Chama
/auth/register-keypara registrar o token com o backend - Armazena o token no NetBox para requisições autenticadas futuras
Usando Chaves API¶
Todas as requisições (exceto endpoints de bootstrap) requerem o header X-Proxbox-API-Key:
bash
curl http://localhost:8800/proxmox/endpoints \
-H "X-Proxbox-API-Key: sua-chave-api-segura-com-pelo-menos-32-caracteres"
Endpoints Sem Autenticação¶
Estes endpoints não requerem autenticação:
| Endpoint | Propósito |
|---|---|
GET / |
Metadados raiz |
GET /docs |
Documentação OpenAPI |
GET /redoc |
Documentação ReDoc |
GET /openapi.json |
Schema OpenAPI |
GET /health |
Verificação de saúde |
GET /meta |
Metadados do serviço |
GET /auth/bootstrap-status |
Verifica se bootstrap é necessário |
POST /auth/register-key |
Registra primeira chave (apenas quando nenhuma chave existe) |
Endpoints de Gerenciamento de Chaves¶
Todos os endpoints de gerenciamento de chaves requerem autenticação:
Listar Chaves API¶
```bash curl http://localhost:8800/auth/keys \ -H "X-Proxbox-API-Key: sua-chave"
{"keys": [{"id": 1, "label": "chave-bootstrap", "is_active": true, "created_at": 1712345678.123}]}¶
```
Criar uma Nova Chave¶
```bash curl -X POST http://localhost:8800/auth/keys \ -H "X-Proxbox-API-Key: sua-chave"
{"id": 2, "label": "", "is_active": true, "created_at": 1712345678.456, "raw_key": "a-chave-gerada-automaticamente"}¶
```
A raw_key é retornada apenas uma vez — armazene-a com segurança.
Desativar uma Chave¶
```bash curl -X POST http://localhost:8800/auth/keys/1/deactivate \ -H "X-Proxbox-API-Key: sua-chave"
{"id": 1, "label": "chave-bootstrap", "is_active": false, "created_at": 1712345678.123}¶
```
Reativar uma Chave¶
```bash curl -X POST http://localhost:8800/auth/keys/1/activate \ -H "X-Proxbox-API-Key: sua-chave"
{"id": 1, "label": "chave-bootstrap", "is_active": true, "created_at": 1712345678.123}¶
```
Deletar uma Chave¶
```bash curl -X DELETE http://localhost:8800/auth/keys/1 \ -H "X-Proxbox-API-Key: sua-chave"
(204 No Content)¶
```
Proteção Contra Brute-Force¶
O backend implementa bloqueio por IP:
- Máximo de 5 tentativas falhas
- Duração do bloqueio: 5 minutos
- O bloqueio é limpo após autenticação bem-sucedida
Melhores Práticas de Segurança¶
- Use chaves fortes: Pelo menos 32 caracteres, preferencialmente 64 caracteres
- Armazene chaves com segurança: Trate a
raw_keyde/auth/keyscomo uma senha — armazene uma vez - Rotacione chaves regularmente: Crie uma nova chave, atualize suas aplicações, delete a antiga
- Use HTTPS em produção: Chaves são enviadas em headers — proteja-as em trânsito
- Limite o escopo das chaves: Crie chaves separadas para propósitos diferentes (monitoramento, sincronização, admin)
Resolução de Problemas¶
"No API key configured"¶
{"detail": "No API key configured. Register a key via POST /auth/register-key or use an existing key."}
O banco de dados não tem chaves API. Chame /auth/register-key com uma nova chave para fazer o bootstrap.
"Invalid API key"¶
Verifique se:
- Você está enviando o header
X-Proxbox-API-Key - O valor da chave corresponde exatamente (sem espaços extras ou newlines)
- A chave não foi desativada ou deletada
"Too many failed authentication attempts"¶
Aguarde 5 minutos para o bloqueio expirar, ou reinicie o backend para resetar o estado de bloqueio em memória.