# 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) ```