security-authn-authz
Skill2 starsChanged 5 months agoMITView on GitHub
Autenticación y autorización: hashing de contraseñas, sesiones vs tokens (JWT, opaque), OAuth2/OIDC, MFA, RBAC vs ABAC, principio de menor privilegio, manejo de sesión y logout. Cargá al implementar login, registro o permisos.
In this repository25 other files it gives its agents.
- accessibility-wcagSkill
- agent-orchestrationSkill
- backend-api-designSkill
- backend-data-modelingSkill
- backend-observabilitySkill
- backend-performanceSkill
- blossom-carouselSkill
- browser-qaSkill
- commit-hygieneSkill
- discovery-intakeSkill
- frontend-component-patternsSkill
- geo-seoSkill
- gh-cliSkill
- glosario-vivoSkill
- llm-councilSkill
- pedido-claroSkill
- ponytailSkill
- reporte-comprensibleSkill
- sdd-flowSkill
- secure-by-defaultSkill
- security-owaspSkill
- security-secretsSkill
- security-supply-chainSkill
- turtle-protocolSkill
- ui-ux-pro-maxSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 104
Test: usuario A no puede leer/modificar recurso de usuario B (IDOR).
- Very specific: line 105
Test: token expirado/manipulado/firmado por otro emisor → 401.
- Distinctive: line 106
Test: tras cambio de contraseña, token viejo → 401.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Autenticación y autorización
Cuándo usar
- Implementar registro, login, logout, reset de contraseña, MFA.
- Diseñar el modelo de permisos.
- Resolver un bug que toca sesión o autorización.
Distinguir
- Autenticación (authn): ¿quién sos? (login).
- Autorización (authz): ¿qué podés hacer? (permisos).
- Son independientes. Casi todo el daño viene de mezclarlas.
Contraseñas
- Hash con
argon2id(preferido, parámetros: 64 MB, 3 iter, 4 paralelismo como base) obcryptcon cost ≥12. - Nunca MD5, SHA-1, SHA-256, ni "salt + sha" caseros.
- Reglas: longitud mínima 12, sin requerir mezcla forzada de mayúsculas/símbolos (NIST 800-63B). Sí permitir hasta ≥64 chars, incluir emojis.
- Verificá contra breached password lists (HaveIBeenPwned API con k-anonymity).
- Reset por email: link de un solo uso, expira en ≤1 h, invalida sesiones activas.
Sesiones
Dos modelos, elegí uno y respetalo:
Server session (recomendado para apps web)
- Cookie
Set-Cookie: session=<opaque-id>; HttpOnly; Secure; SameSite=Lax; Path=/. - Sesión almacenada server-side (Redis, BD). Invalidable instantánea.
- Rotación de ID al elevar privilegios (post-login, post-MFA).
JWT (para APIs stateless o SPAs)
- Access token corto (5–15 min) + refresh token largo (días/semanas).
- Firmá con RS256/EdDSA (asymétrico) si distribuís verificación a varios servicios; HS256 si todo es un solo servicio.
- Nunca confíes en
alg: none. Verificáalgen una whitelist. - Refresh token rotativo y revocable (almacenado server-side).
- JWT en
localStoragequeda expuesto a XSS. Para web, preferí cookie HttpOnly.
MFA
- TOTP (RFC 6238) por defecto: apps tipo Authy/Google Authenticator.
- WebAuthn / passkeys para experiencia moderna y phishing-resistant.
- SMS solo como fallback, no como factor principal (SIM swap).
- Códigos de recuperación: 8 códigos one-time, mostrados una vez, hash en BD.
OAuth2 / OIDC
- Authorization Code + PKCE para cualquier app pública (SPA, mobile, CLI).
- Client Credentials para service-to-service.
statesiempre presente (anti-CSRF en el flow).nonceen OIDC para prevenir replay.- Tokens nunca en URL, salvo el
codecorto.
Modelos de permisos
| Modelo | Cuándo |
| RBAC (roles) | Sistema con pocos roles definidos (admin/user/guest). |
| ABAC (atributos) | Permisos por atributos del recurso, contexto, tenant. |
| ReBAC (relaciones) | Grafos de permisos (Google Drive, GitHub). Considerá OpenFGA / SpiceDB. |
Por defecto denegar: si no hay regla que permita, se rechaza.
Verificación
Cada handler protegido pregunta lo mismo:
- ¿Está autenticado? → 401 si no.
- ¿Tiene permiso para esta acción sobre este recurso específico? → 403 si no.
Sin confiar en hidden inputs, query params, o ausencia del botón en UI.
Logout y revocación
- Logout invalida la sesión server-side (no solo borra la cookie).
- "Cerrar sesión en todos los dispositivos" → invalidar todas las sesiones del usuario.
- Cambio de contraseña → invalidar todas las sesiones activas.
Reglas duras
- Sin esquemas de auth caseros. Usá una librería probada y reciente.
- Sin secretos hardcodeados ni en repos. Ver [[security-secrets]].
- Sin permisos verificados solo en el frontend.
- Sin tokens con expiración infinita.
- Sin mensajes que distingan "usuario no existe" de "contraseña incorrecta" en login.
Validación
- Test: usuario A no puede leer/modificar recurso de usuario B (IDOR).
- Test: token expirado/manipulado/firmado por otro emisor → 401.
- Test: tras cambio de contraseña, token viejo → 401.
- Auditoría manual del flujo de reset y MFA.
Relacionadas
[[security-owasp]] · [[security-secrets]] · [[secure-by-default]]
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

