gohorsejobs/backend/internal/middleware/README.md

93 lines
2.3 KiB
Markdown

# Middleware - Security Layer
Middlewares de segurança aplicados a todas as requisições HTTP.
---
## 📦 Middlewares Disponíveis
### `auth.go` - Autenticação JWT
Valida tokens JWT e extrai claims do usuário.
```go
// Uso em rotas protegidas
mux.Handle("/protected", AuthMiddleware(handler))
// Com verificação de role
mux.Handle("/admin", AuthMiddleware(RequireRole("superadmin")(handler)))
```
**Claims extraídas:**
- `UserID` - ID do usuário
- `Role` - Papel (superadmin, admin, recruiter, candidate)
- `CompanyID` - ID da empresa (se aplicável)
---
### `cors.go` - Cross-Origin Resource Sharing
Configura origens permitidas via variável de ambiente.
```env
CORS_ORIGINS=http://localhost:3000,https://gohorsejobs.com
```
**Headers configurados:**
- `Access-Control-Allow-Origin` (whitelist)
- `Access-Control-Allow-Methods`
- `Access-Control-Allow-Headers`
- `Access-Control-Allow-Credentials`
---
### `rate_limit.go` - Rate Limiting
Limita requisições por IP para prevenir abusos.
**Configuração padrão:**
- 100 requisições por minuto por IP
- Retorna `429 Too Many Requests` quando excedido
**Headers de resposta:**
- `Retry-After: 60` (quando limitado)
---
### `security_headers.go` - Security Headers (OWASP)
Adiciona headers de segurança recomendados pela OWASP.
| Header | Valor | Proteção |
|--------|-------|----------|
| `X-Frame-Options` | `DENY` | Clickjacking |
| `X-Content-Type-Options` | `nosniff` | MIME sniffing |
| `X-XSS-Protection` | `1; mode=block` | XSS |
| `Referrer-Policy` | `strict-origin-when-cross-origin` | Vazamento de referrer |
| `Content-Security-Policy` | (configurado) | Injeção de conteúdo |
| `Permissions-Policy` | (configurado) | APIs perigosas |
---
### `logging.go` - Request Logging
Loga todas as requisições com método, path e duração.
---
## 🔗 Ordem de Aplicação
Os middlewares são aplicados na seguinte ordem (de fora para dentro):
1. **Security Headers** - Headers de segurança
2. **Rate Limiting** - Limitação de taxa
3. **CORS** - Cross-origin
4. **Logging** - Log de requisições
5. **Auth** - Autenticação (quando aplicável)
```go
// Em router.go
handler = CORSMiddleware(handler)
handler = RateLimitMiddleware(100, time.Minute)(handler)
handler = SecurityHeadersMiddleware(handler)
```