Autenticação e Autorização da API
Introdução ao documento
Este documento descreve os mecanismos de autenticação/autorização aplicados nos endpoints HTTP do activity-delivery-api.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-04
- Responsável: Time Dhedalos
Referencial teórico
1) Prefixo de endpoint
A API é publicada com prefixo /api nas rotas Laravel.
- Evidência:
routes/api.php:10-34 - Exemplo:
/api/submissions
2) API Key (serviço)
Callback de validação
- Middleware:
ApiKeyMiddleware::handle - Evidência:
app/Http/Middleware/ApiKeyMiddleware.php:15
Regra aplicada
- Lê header
Authorization. - Se ausente, retorna
401com mensagemMissing API Key. - Busca chave na tabela
api_keys(ApiKey::where('key', $apiKey)). - Compara com
hash_equals. - Se inválida, retorna
401com mensagemInvalid API Key.
- Evidência:
app/Http/Middleware/ApiKeyMiddleware.php:17,24,27,33
Header esperado
Authorization: <API_KEY>
3) JWT Bearer
Callback de validação
- Middleware:
JwtAuthenticate::handle - Evidência:
app/Http/Middleware/JwtAuthenticate.php:13
Regra aplicada
- Lê header
Authorization. - Exige prefixo
Bearer. - Extrai token e decodifica com
JWT_SECRET+ algoritmoHS256. - Em erro de decode/expiração, retorna
401.
- Evidência:
app/Http/Middleware/JwtAuthenticate.php:15,17,24
Header esperado
Authorization: Bearer <JWT_TOKEN>
4) Escopo de proteção observado
| Tipo | Como aparece no código | Endpoints |
|---|---|---|
| API Key | Route::middleware('api.key') | GET /submissions, GET /submissions/{id}, POST /submissions/{id}, DELETE /submissions/{id}, GET /submissions/token, GET/DELETE /submissions/files, GET /submissions/status-sumary, activity-template-files/* |
| JWT | Route::middleware('jwt.auth') | POST /submissions |
| Sanctum (sessão) | ->middleware('auth:sanctum') | GET /user |
- Evidência:
routes/api.php:10,14-29,33-34
5) Geração de credenciais de API Key
A chave de serviço é gerada por comando Artisan.
- Comando:
api:key:generate --description=... - Geração de valor:
Str::random(64) - Persistência: tabela
api_keysviaApiKey::create - Evidência:
app/Console/Commands/GenerateApiKey.php:16,28,31
6) Observações de risco técnico
- Uso do mesmo header
Authorizationpara API Key e JWT em contextos distintos exige disciplina por endpoint.- Evidência:
app/Http/Middleware/ApiKeyMiddleware.php:17,app/Http/Middleware/JwtAuthenticate.php:15
- Evidência:
- Retorno de erros de JWT inclui detalhe da exceção no payload (
Token inválido: ...), o que pode expor detalhes operacionais.- Evidência:
app/Http/Middleware/JwtAuthenticate.php:27
- Evidência:
Pendências
- Confirmar se o endpoint
GET /user(auth:sanctum) deve permanecer documentado no contrato público da API. - Padronizar nomenclatura de autenticação em
docs/api/openapi.yamlpara reduzir ambiguidade entreapiKeyebearerAuth.