🔑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.
Referencias
Subscribe to my newsletter
Read articles from Oscar Cortes Bracho directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Oscar Cortes Bracho
Oscar Cortes Bracho
Cloud Software Engineer