Administración de usuarios con AWS Cognito: (1/3) Configuración inicial

El modelo completo de AWS Web - Tutorial 1A

Tabla de contenido principal Haga clic aquí Parte A: Configuración inicial Parte B: La funcionalidad principal Parte C: Últimos pasos para la plena

Descarga el Github aquí.

Introducción

Configurar la autenticación de usuario puede llevar años, pero es una piedra angular esencial de cualquier aplicación de producción. Existen opciones como AuthO y PassportJS, pero tienen curvas de aprendizaje difíciles, requieren un mantenimiento continuo o son vulnerables a errores del programador, ya que requieren autoconfiguración. Si tan solo hubiera un servicio de gestión de usuarios de manos libres, personalizable, seguro y altamente escalable en la nube.

Presentamos Amazon Cognito y las identidades federadas. Cognito es la solución de AWS para administrar perfiles de usuario, y las identidades federadas ayudan a realizar un seguimiento de sus usuarios en varios inicios de sesión. Integrado en el ecosistema de AWS, AWS Cognito abre un mundo de posibilidades para el desarrollo avanzado de front-end, ya que los roles de Cognito + IAM le brindan acceso seguro selectivo a otros servicios de AWS. ¿Quiere permitir solo el acceso de S3 Bucket a usuarios específicos que hayan iniciado sesión? Simplemente conecte un inicio de sesión de Cognito con un rol de IAM que permita el acceso al depósito, ¡y ahora su depósito está seguro! Lo mejor de todo es que el nivel gratuito le brinda 50,000 usuarios activos mensuales, por lo que no tendrá que preocuparse por pagar más hasta que esté listo para comenzar.

Esta plantilla es una aplicación web React-Redux que tiene preintegradas todas las funciones de AWS Cognito y Federated Identities. Use este texto estándar si tiene una aplicación que desea desarrollar con un servicio de autenticación listo para producción desde el principio. De hecho, esta es una plataforma de lanzamiento poderosa para su próxima gran idea.

¡Vaya a AWS Cognito en la consola de AWS para comenzar!

Configuración inicial: Cognito

Configuraremos AWS Cognito, que es un grupo de inicio de sesión personalizado (como inicio de sesión con correo electrónico). Cognito NO ES un administrador de inicio de sesión para ningún tipo de inicio de sesión (como Facebook y Gmail), solo para inicios de sesión personalizados.

Primero creemos un grupo de usuarios haciendo clic en "Administrar sus grupos de usuarios". Un grupo de usuarios es un grupo de usuarios que cumplen la misma designación. Si estuvieras haciendo un clon de Uber, harías 2 grupos de usuarios: uno para conductores y otro para pasajeros. Por ahora, creemos un nuevo grupo de usuarios llamado "App_Users". La pantalla de configuración debería verse así:

Vamos a recorrer este proceso paso a paso, así que ingrese el nombre del grupo de "App_Users" y haga clic en "Step through settings". El siguiente paso es “Atributos”, donde definimos los atributos que tendrán nuestros “App_Users”.

Ahora, solo queremos tener un correo electrónico, contraseña y "agentName". El correo electrónico es nuestro identificador único para un usuario y la contraseña es un campo obligatorio (por eso no lo ve en la lista de atributos estándar). Queremos que los usuarios puedan tener un nombre en clave por el que pasar, así que configuremos "agentName" como atributo personalizado. Solo usamos "agentName" para mostrar cómo agregar atributos personalizados. Desplácese hacia abajo y verá la opción para agregar atributos personalizados.

A la fecha en que se escribió este tutorial, no puede volver atrás y cambiar los atributos personalizados (aunque AWS parece poder hacerlo), ¡así que asegúrese de hacerlo bien la primera vez! Si necesita cambiar los atributos, deberá crear un nuevo grupo de usuarios. Es de esperar que AWS solucione este problema pronto. De todos modos, ¡pase a las políticas de la cuenta!

Entonces, podemos ver aquí que nuestras contraseñas se pueden hacer cumplir para requerir ciertos caracteres. Obviamente, requerir una combinación de varios tipos de caracteres sería más seguro, pero a los usuarios a menudo no les gusta eso. Para un término medio, solo solicitemos que la contraseña tenga más de 8 caracteres de longitud e incluya al menos 1 número. También queremos que los usuarios puedan registrarse ellos mismos. Las otras partes no son tan importantes, así que pasemos al siguiente paso: verificaciones.

Esta parte es genial, podemos integrar fácilmente la autenticación multifactor (MFA). Esto significa que los usuarios deben registrarse con un correo electrónico y con otra forma de autenticación, como un número de teléfono. Se enviaría un PIN a ese número de teléfono y el usuario lo usaría para verificar su cuenta. No usaremos MFA en este tutorial, solo verificación por correo electrónico. Configure MFA en "desactivado" y marque solo "Correo electrónico" como método de verificación. Podemos dejar el “AppUsers-SMS-Role” (rol de IAM) que se ha completado, ya que no lo usaremos pero es posible que lo usemos en el futuro. Cognito usa ese rol de IAM para estar autorizado a enviar mensajes de texto SMS usados ​​en MFA. Como no usamos MFA, podemos pasar a: Personalizaciones de mensajes.

Cuando los usuarios reciben los correos electrónicos de verificación de su cuenta, podemos especificar qué se incluye en ese correo electrónico. Aquí hemos creado un correo electrónico personalizado y colocado mediante programación en el PIN de verificación representado como {####}. Desafortunadamente, no podemos pasar otras variables como un enlace de verificación. Para lograr esto, tendríamos que usar una combinación de AWS Lambda y AWS SES.

Desplácese hacia abajo en la página en el paso de Personalización de mensajes y podemos agregar nuestras propias direcciones predeterminadas DE y RESPONDER A. Para hacer esto, necesitamos verificar un correo electrónico en AWS SES, que es fácil y muy rápido de configurar. En una nueva pestaña, vaya a la página de inicio de la consola de AWS haciendo clic en el cubo naranja en la parte superior izquierda. En la página de inicio de la consola, busque SES (Simple Email Service). Haga clic para ir a la página SES, luego haga clic en el enlace Direcciones de correo electrónico en el menú de la izquierda.

A continuación, haga clic en "Verificar una nueva dirección" e introduzca el correo electrónico que desea verificar.

Ahora inicie sesión en su correo electrónico y abra el correo electrónico de AWS. Haga clic en el enlace dentro del correo electrónico para verificar, y será redirigido a la página de AWS SES nuevamente. ¡Ha verificado correctamente un correo electrónico! Eso fue fácil.

Ahora que está hecho, regresemos a AWS Cognito y pasemos a: Etiquetas.

No es obligatorio agregar etiquetas a un grupo de usuarios, pero definitivamente es útil para administrar muchos servicios de AWS. Simplemente agreguemos una etiqueta para 'AppName' y establezcamos el valor de 'MyApp'. Ahora podemos pasar a: Dispositivos.

Podemos optar por recordar los dispositivos de nuestro usuario. Normalmente selecciono "Siempre" porque recordar los dispositivos de los usuarios es gratuito y no requiere codificación de nuestra parte. La información también es útil, ¿por qué no? Siguiente paso: aplicaciones.

Queremos que ciertas aplicaciones tengan acceso a nuestro grupo de usuarios. Estas aplicaciones no están presentes en ningún otro lugar del ecosistema de AWS, lo que significa que cuando creamos una "aplicación", es un identificador exclusivo de Cognito. Las aplicaciones son útiles porque podemos tener varias aplicaciones que acceden al mismo grupo de usuarios (imagine una aplicación de clonación de Uber y una aplicación de práctica de prueba de conducción gratuita). Configuraremos el token de actualización en 30 días, lo que significa que cada intento de inicio de sesión devolverá un token de actualización que podemos usar para la autenticación en lugar de iniciar sesión cada vez. Dejamos de hacer clic en "Generar secreto de cliente" porque tenemos la intención de iniciar sesión en nuestro grupo de usuarios desde el front-end en lugar de desde el back-end (ergo, no podemos guardar secretos en el front-end porque eso es inseguro). Haga clic en "Crear aplicación" y luego en "Siguiente paso" para pasar a: Activadores.

Podemos desencadenar varias acciones en el flujo de configuración y autenticación de usuario. ¿Recuerda cómo dijimos que podemos crear correos electrónicos de verificación de cuentas más complejos utilizando AWS Lambda y AWS SES? Aquí es donde lo configuraríamos. Para el alcance de este tutorial, no utilizaremos ningún activador de AWS Lambda. Pasemos al paso final: revisar.

Aquí repasamos todas las configuraciones de instalación que hemos realizado. Si está seguro de esta información, haga clic en "Crear grupo" y se generará nuestro grupo de usuarios de Cognito.

Tome nota del ID de la piscina us-east-1_6i5p2Fwaoen la pestaña Detalles de la piscina.

Y el ID de cliente de la aplicación 5jr0qvudipsikhk2n1ltcq684ben la pestaña Aplicaciones. Necesitaremos ambos en nuestra aplicación del lado del cliente.

Ahora que Cognito está configurado, podemos configurar las identidades federadas para múltiples proveedores de inicio de sesión. En este tutorial no cubrimos los detalles de FB Login ya que no está dentro del alcance de esta serie de tutoriales. Sin embargo, la integración de FB Login es muy fácil y mostraremos cómo se hace en la siguiente sección.

Configuración inicial: identidades federadas

A continuación, queremos configurar "Identidades federadas". Si tenemos una aplicación que permite múltiples proveedores de inicio de sesión (Amazon Cognito, Facebook, Gmail, etc.) para el mismo usuario, usaríamos Identidades Federadas para centralizar todos estos inicios de sesión. En este tutorial, utilizaremos tanto nuestro inicio de sesión de Amazon Cognito como un inicio de sesión de Facebook potencial. Vaya a Identidades federadas y comience el proceso para crear un nuevo grupo de identidades. Dale un nombre apropiado.

Ahora expanda la sección "Proveedores de autenticación" y verá la siguiente pantalla. En Cognito, vamos a agregar el grupo de usuarios de Cognito que acabamos de crear. Copie y pegue el ID del grupo de usuarios y el ID del cliente de la aplicación que anotamos anteriormente.

Y si quisiéramos iniciar sesión en Facebook para el mismo grupo de identidades de usuario, podemos ir a la pestaña de Facebook y simplemente ingresar nuestra ID de aplicación de Facebook. ¡Eso es todo lo que hay en la consola de AWS!

Guarde el grupo de identidades y será redirigido a la siguiente pantalla donde se crean los roles de IAM para representar el grupo de identidades federado. El rol de IAM no autenticado es para usuarios que no han iniciado sesión y la versión autenticada es para usuarios que han iniciado sesión. Podemos otorgar permiso a estos roles de IAM para acceder a otros recursos de AWS, como los buckets S3 y demás. Así es como logramos una mayor seguridad al integrar nuestra aplicación en todo el ecosistema de AWS. Continúe para terminar de crear este grupo de identidades.

Ahora debería ver la siguiente pantalla después de crear correctamente el grupo de identidades. Ahora solo necesita tomar nota de 1 cosa que es el ID del grupo de identidades (es decir us-east-1:65bd1e7d-546c-4f8c-b1bc-9e3e571cfaa7) que usaremos más adelante en nuestro código. ¡Excelente!

Salga de todo y vuelva a la pantalla principal de AWS Cognito. Si entramos en la sección Cognito o en la sección Identidades federadas, vemos que tenemos configurados los 2 pools necesarios. ¡AWS Cognito y AWS Federated Identities están listos para funcionar!

¡Eso es todo para configurar! Con estos 2 grupos podemos integrar el resto de nuestro código en el servicio de autenticación completo de Amazon y lograr una gestión de usuarios de primer nivel. ¡Eso fue mucho más fácil que OAuth + Passport.js personalizado! Si te gusta lo que has visto hasta ahora, ¡sigue leyendo! Recuerde que después de aprender esto una vez, será muy fácil en el futuro, por lo que definitivamente vale la pena invertir tiempo. ¡Nos vemos en la próxima sección!

Tabla de contenido principal Haga clic aquí Parte A: Configuración inicial Parte B: La funcionalidad principal Parte C: Últimos pasos para completarlos Estos métodos se utilizaron parcialmente en la implementación de renthero.ca