Autenticación de usuarios con Amazon Cognito - Diseño de User Pool e Identity Pool
Explicamos la autenticación de usuarios con Cognito User Pool, el acceso a recursos AWS con Identity Pool y la integración de inicio de sesión social.
Descripción general de Cognito
Cognito es un servicio que proporciona autenticación, autorización y gestión de usuarios para aplicaciones web y móviles, gratuito hasta los primeros 50,000 MAU (usuarios activos mensuales). User Pool es un directorio de usuarios que gestiona registro, inicio de sesión y MFA. Identity Pool emite credenciales temporales de AWS a usuarios autenticados, permitiendo el acceso directo a recursos de AWS. El inicio de sesión social (Google, Facebook, Apple, Amazon) y la federación SAML/OIDC se soportan de forma nativa, y la integración con IdPs externos se completa con apenas unas líneas de configuración.
Diferenciación entre User Pool e Identity Pool
User Pool emite tokens JWT (token de ID, token de acceso, con período de validez configurable de 5 minutos a 1 día) que se verifican con el autorizador de API Gateway. Identity Pool recibe tokens de User Pool y devuelve credenciales temporales de AWS basadas en roles IAM. Cuando el frontend sube archivos a S3, se llama directamente al SDK de S3 usando credenciales obtenidas de Identity Pool. Los triggers Lambda permiten implementar restricciones de dominio de email en Pre Sign-up, envío de emails de bienvenida en Post Confirmation y adición de claims personalizados en Pre Token Generation. El principio de elección es claro: si solo se necesita autenticación de API backend, los JWT de User Pool son suficientes; si los clientes necesitan llamar directamente a recursos AWS (S3, DynamoDB, AppSync), se combina con Identity Pool. Para aprender sobre autenticación y seguridad, consulte libros en Amazon.
Funciones avanzadas de autenticación
Las funciones de seguridad avanzada de Cognito proporcionan autenticación adaptativa, determinando dinámicamente la necesidad de MFA basándose en el nivel de riesgo (dispositivo, dirección IP, historial de inicio de sesión). Los inicios de sesión desde dispositivos habituales omiten MFA, mientras que los accesos desde dispositivos desconocidos o IPs anómalas fuerzan MFA. Los flujos de autenticación personalizados usan triggers Lambda para implementar verificación CAPTCHA o MFA personalizado. La UI alojada del User Pool ofrece una página de inicio de sesión personalizable donde se puede aplicar branding propio. La personalización de tokens permite agregar claims personalizados al token de ID para usarlos en decisiones de autorización del lado de la aplicación.
Mejores prácticas de diseño y trampas
Tres trampas comunes al adoptar Cognito. Primero, los User Pools tienen atributos que no pueden cambiarse después de la creación (formato de nombre de usuario, atributos obligatorios), por lo que el diseño del schema debe decidirse cuidadosamente durante la fase de diseño. Cambiar a "usar email como nombre de usuario" posteriormente requiere recrear el User Pool y migrar usuarios. Segundo, olvidar configurar un dominio personalizado significa que Cognito emite URLs por defecto (amazoncognito.com) que pueden causar desconfianza del usuario desde una perspectiva de prevención de phishing. Se recomienda configurar un dominio personalizado con certificado ACM. Tercero, tener en cuenta el timeout de los triggers Lambda (3 segundos por defecto). Si Pre Token Generation llama a una API externa y la latencia excede el límite, la emisión de tokens falla y los usuarios no pueden iniciar sesión. Diseñe con una capa de caché para llamadas externas y consciencia del timeout.
Comparación con Auth0 y Firebase Authentication
Los competidores de Cognito incluyen Auth0 y Firebase Authentication. Auth0 sobresale en usabilidad de la consola de administración y calidad de documentación, con presets ricos para flujos de autenticación complejos (multi-tenancy basada en Organization, autenticación step-up), pero a escala su costo por MAU alcanza varias veces el de Cognito. Firebase Authentication se integra naturalmente con el ecosistema de Google (Firestore, Cloud Functions), pero en arquitecturas centradas en AWS requiere implementación adicional para la integración con roles IAM. La mayor fortaleza de Cognito es la integración nativa con servicios AWS (autorizadores de API Gateway, mapeo de roles IAM de Identity Pool, conexión directa con AppSync), proporcionando mínima fricción al construir backends centrados en AWS. Sin embargo, la personalización de la UI alojada de Cognito y la UX de la consola de administración son inferiores a Auth0, por lo que cuando la flexibilidad de la pantalla de autenticación es prioridad, considere componentes de Amplify UI.
Precios de Cognito
Los precios de Cognito se cobran por número de usuarios activos mensuales (MAU). Los primeros 10,000 MAU son gratuitos, y hasta 50,000 MAU cuesta aproximadamente 0.0055 USD por MAU. Los usuarios de federación SAML/OIDC cuestan aproximadamente 0.015 USD por MAU. Las funciones de seguridad avanzada (autenticación adaptativa, detección de credenciales comprometidas) tienen cargos adicionales de aproximadamente 0.050 USD por MAU. La emisión de credenciales AWS de Identity Pool es gratuita. Con facturación basada en MAU, los usuarios registrados que no inician sesión no afectan los costos.
Resumen
Cognito es un servicio que proporciona autenticación de usuarios con User Pool y acceso a recursos AWS con Identity Pool. Se integra con IdPs externos mediante inicio de sesión social y federación SAML/OIDC, y aplica dinámicamente MFA basado en riesgo con autenticación adaptativa. La integración nativa con servicios AWS es su mayor fortaleza, y el diseño cuidadoso del schema del User Pool en la etapa inicial es clave para la operación a largo plazo.