Marco Teórico
OAuth2, OpenID Connect (OIDC), y JWT se combinan comúnmente porque juntos ofrecen una solución integral, segura y eficiente para autenticación y autorización en aplicaciones modernas. La razón de esta cambinación es la siguiente:
- Completo: OAuth2 + OIDC cubren tanto autorización como autenticación.
- Eficiente: JWT permite transportar tokens de manera rápida y sin depender de almacenamiento adicional en el servidor.
- Compatible: Es ampliamente utilizado en aplicaciones web, móviles y APIs debido a su facilidad de integración.
- Servicios de seguridad: Requisitos generales que se necesitan para proteger la información.
- Autenticación: Verificar que un usuario sea quien dice ser.
- Autorización: Controlar qué recursos y acciones están permitidos para un usuario autenticado.
- Confidencialidad: Proteger la información transmitida.
- Integridad: Asegurar que los datos no sean manipulados en el proceso.
- Mecanismos de seguridad: Formas concretas de implementar esos requisitos en la práctica.
- OAuth2: Cómo se implementa la autorización mediante flujos como el Authorization Code Flow para delegar el acceso a recursos de manera segura.
- OpenID Connect (OIDC): Cómo se implementa la autenticación mediante una extensión de OAuth2 que utiliza el ID Token para identificar al usuario.
- JWT (JSON Web Token): Cómo se representa y transporta la información de manera segura mediante un token firmado digitalmente que asegura integridad y confidencialidad.
Implementación en .NET
1. Configuración del Proveedor de Identidad
- ID del Cliente (Client ID).
- Secreto del Cliente (Client Secret).
- URL de autorización y token (Authorization Endpoint, Token Endpoint).
2. Configuración del Proyecto en .NET
3. Proteger Endpoints en la API
4. Flujo de Autenticación y Autorización
- El cliente (como una SPA o aplicación móvil) redirige al usuario al endpoint de autorización del proveedor.
- Una vez autenticado, el proveedor devuelve:
- Un ID Token (si usas OIDC) en formato JWT con información sobre el usuario.
- Un Access Token (OAuth2) en formato JWT para acceder a los recursos de la API.
- El cliente incluye el Access Token en las peticiones a la API:
- La API valida el token utilizando el middleware configurado.
5. Validar el Token JWT
6. Flujo Adicional: OpenID Connect para Login
Conclusión
- Token-Based Authentication con Simple Tokens (Sin JWT): Utiliza tokens simples (generalmente UUIDs o cadenas aleatorias) en lugar de JWT. Estos tokens se almacenan en una base de datos en el servidor para validarlos. Ejemplo: Sesiones tradicionales usando cookies con un token de sesión generado.
- API Key Authentication: Las aplicaciones utilizan claves API para autenticar solicitudes. Estas claves son secretas y se pasan en cada solicitud (por ejemplo, en la cabecera HTTP). Ejemplo: Uso de claves API en servicios como Google Maps o servicios REST.
- LDAP (Lightweight Directory Access Protocol): Utilizado principalmente en entornos empresariales para autenticar usuarios a través de un directorio centralizado. Ejemplo: Aplicaciones internas en organizaciones que usan Active Directory.
- SAML (Security Assertion Markup Language): Un estándar basado en XML utilizado para autenticación y autorización en aplicaciones empresariales. Ejemplo: Integraciones con servicios empresariales como Salesforce o aplicaciones on-premise.
- Session-Based Authentication: Una técnica tradicional donde el servidor genera una sesión para el usuario después de autenticarse, y el cliente almacena un identificador de sesión (generalmente en una cookie). Ejemplo: Aplicaciones web que no utilizan APIs modernas.
- Biometric Authentication: Utiliza características biométricas como huellas digitales, reconocimiento facial o escaneo de retina para autenticar al usuario. Ejemplo: Aplicaciones móviles con autenticación por huella digital (ej.: Face ID, Touch ID).
- Passwordless Authentication: Elimina el uso de contraseñas y utiliza métodos alternativos como enlaces mágicos enviados por correo electrónico, códigos de verificación, o autenticación con dispositivos confiables. Ejemplo: Aplicaciones que envían un enlace para iniciar sesión (como Slack o Notion).
- Blockchain-Based Authentication: Utiliza tecnologías de blockchain para verificar identidades descentralizadas y gestionar autorizaciones. Ejemplo: Identidades descentralizadas con proyectos como uPort o Sovrin.

