Source: https://olcortesb.hashnode.dev/aws-cognito-lambda-triggers
AWS Cognito es un servicio de autenticación, autorización y gestión de usuarios, ofrecido Amazon complementé administrado, facilitando la integración con aplicaciones Web y Móviles, permitiendo incluso conectarse con distintos IDP (Identity Provider) y login social, entre otros. AWS Cognito es compatible con Open ID Connect ( OIDC), OAuth 2.0, SAML 2.0, JSON Web Tokens (JWT).
Algunas de las caracteristicas que ofrece AWS Cognito no son 100% customizables, como es el caso del UI (las pantallas de Sing In, Sing Up, recuperar contraseña) entre otras, no obstante en las Ăşltimas ediciones de los AWS re:invent ha recibido varias actualizaciones y mejoras en las caracterĂsticas que ofrece el servicio.
En este caso, sin embargo, vamos a ver con un ejemplo, una caracterĂstica interesante que permite extender los flujos existentes y agregar nuevos workflows de trabajo a AWS cognito con lambda triggers.
Desplegando AWS cognito
Debido a la dependencia del Stack del Cognito con las Lambdas que se ejecutaran antes eventos, necesitamos dos despliegues para identificar los arn
de las lambas y el Cognito, luego de esto agregamos la referencias al Cognito de las lambas y a las lambdas los permisos del Cognito como muestro a continuaciĂłn
El AWS cognito que desplegamos para este ejemplo tiene una aplicacion que ademas permite hacer pruebas con Postman, a continuacion la configuracion que pueden encontrar completa en el repositorio que acompaña este post: Repositorio con el código fuente
...
Resources:
# Create a Cognito User pool for user management
OlcortesbUserPool:
Type: AWS::Cognito::UserPool
Properties:
Policies:
PasswordPolicy:
MinimumLength: 8
AutoVerifiedAttributes:
- email
UsernameAttributes:
- email
...
Agregando las lambdas al cognito
En el cĂłdigo inicial que subirĂ© al repositorio las lĂneas de LambdaConfig estarán comentaras, agregue los ARN de las lambas que contienen la lĂłgica de los eventos que se describen. PresigUp
y PostConfirmation
Resources:
# Create a Cognito User pool for user management
OlcortesbUserPool:
Type: AWS::Cognito::UserPool
Properties:
Policies:
PasswordPolicy:
MinimumLength: 8
AutoVerifiedAttributes:
- email
UsernameAttributes:
- email
# LambdaConfig:
# PreSignUp: arn:aws:lambda:eu-central-1:{account}:function:{name} # 3. Create an application for authentication
# PostConfirmation: arn:aws:lambda:eu-central-1:{account}:function:{name}
Las posibles lambdas que podemos disparar los encontramos en la documentaciĂłn
PostAuthentication: String
PostConfirmation: String
PreAuthentication: String
PreSignUp: String
PreTokenGeneration: String
PreTokenGenerationConfig:
Probando la configuración básica
La primera lambda, la PreSing
, se lanza al momento de darse de alta en la plataforma,
En el Log que muestro a continuación, corresponde al Log de la landa indicando que un usuario está intentando darse de alta
cognito
envĂa un cĂłdigo al correo para validarlo:
Al momento de colocar el código correcto se dispara la siguiente lambda y el usuario está finalmente creado
Se puede observar el usuario validado
DescripciĂłn del CĂłdigo
El código del presente ejemplo está subido a este repositorio:
aws-cognito-lambda-triggers/
├── app/ # Application Lambda function
│ └── app.js # Simple handler that returns the event
├── postconfirmation/ # Post-confirmation Lambda trigger
│ └── postConfirmation.mjs # Handler for post-confirmation events
├── presignup/ # Pre-signup Lambda trigger
│ └── preSignUp.mjs # Handler for pre-signup events
├── .gitignore # Git ignore file
├── cognito.yaml # Cognito resources CloudFormation template
├── README.md # Project documentation
├── samconfig.toml # SAM CLI configuration
├── sample.samconfig.toml # Sample SAM configuration
└── template.yaml # Main CloudFormation template
Conclusiones
Se desplegĂł un
cognito
con dos lambdas triggers configuradasSĂ© probo el flujo de Sign Up de un usuario validando los puntos importantes en el proceso de alga
Dentro de estas lambdas se puede agregar la lĂłgica que los flujos que estamos trabajando necesiten, agregando validaciones, funcionalidades, actualizaciĂłn de campos de usuario y demás caracterĂsticas que permite la versatilidad de AWS Lambda
El código de las lambdas está solo de ejemplo para entender el comportamiento, se puede agregar el código que se desee como se deja explicado en el rearme con ejemplos.
Top comments (1)
Muy buena la explicación Oscar, sin duda que podemos usar Cognito para mucho más que un simple login de usuario, al tener estas triggers podemos hacer infinidades de casos de usos que aporten valor al negocio.