🔑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 configuradas

  • Sé 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

0
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