DEV Community

Cover image for 🔑AWS Cognito + ⚡ Lambda triggers
olcortesb for AWS Español

Posted on

4 4 2 2 2

🔑AWS Cognito + ⚡ Lambda triggers

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
...
Enter fullscreen mode Exit fullscreen mode

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}
Enter fullscreen mode Exit fullscreen mode

Las posibles lambdas que podemos disparar los encontramos en la documentación

  PostAuthentication: String
  PostConfirmation: String
  PreAuthentication: String
  PreSignUp: String
  PreTokenGeneration: String
  PreTokenGenerationConfig:
Enter fullscreen mode Exit fullscreen mode

Probando la configuración básica

La primera lambda, la PreSing, se lanza al momento de darse de alta en la plataforma,

image

En el Log que muestro a continuación, corresponde al Log de la landa indicando que un usuario está intentando darse de alta

image

cognito envía un código al correo para validarlo:

image

Al momento de colocar el código correcto se dispara la siguiente lambda y el usuario está finalmente creado

image

Se puede observar el usuario validado

image

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
Enter fullscreen mode Exit fullscreen mode

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

Top comments (1)

Collapse
 
hectorfernandezdev profile image
Hector Fernandez CloudparaTodo •

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.