401 Unauthorized es el error de "por favor logueate". El servidor recibió tu petición pero no puede verificar quién sos, no enviaste credenciales, o las que enviaste son inválidas o vencidas. Es un código 4xx, y la buena noticia es que suele ser fácil de arreglar: autenticate bien.
401 vs 403, la distinción que confunde a todos
- 401 Unauthorized → "No sé quién sos. Autenticate y reintentá." (a pesar del nombre, es sobre autenticación).
- 403 Forbidden → "Sé quién sos, e igual no podés."
Regla práctica: 401 = ¿quién sos? · 403 = lo sé, y no.
Causas comunes
| Causa | Qué pasa |
|---|---|
| Sin credenciales | La petición no incluyó Authorization ni sesión |
| Sesión/token vencido | Tu login o JWT expiró |
| Token / API key inválido | Credencial equivocada, revocada o mal tipeada |
| Esquema de auth equivocado | Enviar Basic donde la API espera Bearer |
Cómo arreglarlo, como usuario
- Logueate, o salí y volvé a entrar para refrescar una sesión vencida.
- Limpiá cookies si quedó una sesión vieja trabada.
- Revisá usuario/contraseña (y el paso de 2FA).
Cómo arreglarlo, como desarrollador / consumidor de API
- Revisá el formato del header:
Authorization: Bearer <token>. - Verificá el token (no vencido, no revocado, firmado con la key correcta).
- Leé
WWW-Authenticateel 401 debería decir el esquema esperado. - Refrescá, no hagas loop con el token muerto.
Una oleada repentina de 401 en un endpoint de login puede ser un intento de credential stuffing en curso. El problema opuesto es más silencioso y peor: un endpoint que debería devolver 401 y no lo hace. El pentester con IA de Nurbak escanea tu repo buscando endpoints sin chequeo de auth y otros bugs explotables, y puede abrir un PR con el fix. Tu primer escaneo es gratis. Para una revisión manual, seguí el checklist de seguridad de APIs.
