16. Autenticación y autorización
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
La autenticación establece una identidad. La autorización basada en políticas decide si esa identidad puede ejecutar una operación. Separarlas explica los dos códigos de fallo:
401 Unauthorized: no se estableció una identidad utilizable;403 Forbidden: la identidad es válida, pero no satisface la política del endpoint.
Requisitos previos
Sección titulada «Requisitos previos»Completa primero minimal APIs y controladores. Ya debes comprender los códigos HTTP, el orden del middleware y la inyección de dependencias.
Validar un token, no solo decodificarlo
Sección titulada «Validar un token, no solo decodificarlo»La prueba local configura el manejador JWT bearer con issuer, audience, clave de firma y validación de vida útil. Decodificar los tres segmentos Base64Url no es autenticar: aún hay que validar la firma y todos los claims relevantes.
Las claves se generan en memoria para un solo proceso. Ningún token entra en stdout, fixtures, control de versiones ni el sitio. Un tiempo fijo del curso gobierna la vida útil, así que un token caducado sigue caducado en cada runner.
== JWT bearer authentication rejects unusable credentialsmissing token: 401malformed token: 401expired token: 401wrong signature: 401Una política expresa el permiso de aplicación
Sección titulada «Una política expresa el permiso de aplicación»El endpoint exige CanReadScales, una política que requiere el claim scope=scales.read. Un token bien firmado sin ese claim está autenticado pero prohibido; el token con el claim llega al manejador:
== A policy distinguishes authenticated from authorizedwithout required claim: 403with required claim: 200 C majorEl experimento demuestra el comportamiento local de ASP.NET Core, no un despliegue OAuth2. Producción aún necesita un servidor de autorización confiable, rotación y descubrimiento de claves, HTTPS, un contrato deliberado de mapeo de claims y una audience por resource server. Una API de producción no debe crear sus propios access tokens.
Ejecutar la prueba
Sección titulada «Ejecutar la prueba»dotnet run --project code/csharp-advanced/Advanced -c Release -- l16La salida comprobada está en expected/l16.txt.
Ejercicios
Sección titulada «Ejercicios»- Añade una política que acepte
scales.reado el roladminy prueba ambas ramas. - Añade un issuer incorrecto y una audience incorrecta a la matriz 401 sin imprimir ningún token.
- Sustituye la clave simétrica del curso por la validación de una clave pública asimétrica local.
Soluciones
- Escribe un
AuthorizationHandlero usaRequireAssertion; no cambies autenticación y verifica que una identidad válida pero insuficiente aún recibe 403. - Parametriza issuer y audience en la fábrica, escribe solo el estado y conserva el validador temporal fijo.
- Crea un par RSA efímero, firma con la clave privada y configura validación solo con la clave pública. Libera ambas claves y no publiques clave ni token.