DEV Community

Cover image for Una Guía para Principiantes sobre la Autenticación usando API Gateway y Lambda Authorizer
Augusto Valdivia for AWS Español

Posted on

Una Guía para Principiantes sobre la Autenticación usando API Gateway y Lambda Authorizer

Entender cómo autenticar usuarios a través de un API Gateway puede ser un desafío, pero es una habilidad esencial para los desarrolladores, especialmente cuando se trata de proveedores de identidad (IdPs) como Okta o Active Directory. Esta guía proporciona una explicación clara, paso a paso, del flujo de autenticación utilizando un Lambda Authorizer, facilitando su comprensión para los principiantes.

Historia

Imagina que te estás preparando para una entrevista de trabajo en una empresa de tecnología, y el entrevistador te pregunta cómo manejar la autenticación de usuarios en una arquitectura sin servidor. Conocer el flujo de autenticación con un API Gateway y un Lambda Authorizer es crucial. Vamos a desglosarlo en partes manejables.

El Flujo de Autenticación

Autenticación del Usuario:

El proceso comienza cuando un usuario ingresa su ID de usuario y contraseña en un formulario de inicio de sesión. Envía estas credenciales a un IdP, como Okta o Active Directory.
Si las credenciales son válidas, el IdP autentica al usuario y devuelve un token (a menudo un JSON Web Token, o JWT). Este token sirve como prueba de que el usuario ha sido autenticado con éxito.

Llamada a la API con Token:

A continuación, el usuario desea acceder a un recurso a través del API Gateway. Para hacerlo, incluye el token recibido en el encabezado de su solicitud a la API.

Este token es esencial porque le dice al API Gateway que el usuario es quien dice ser. Sin este token, la solicitud será denegada.

Lambda Authorizer para Validación:

Dado que no estás utilizando AWS Cognito y en su lugar dependes de un IdP, se utiliza un Lambda Authorizer. Este es un código personalizado que escribes para validar el token.
Cuando el API Gateway recibe la solicitud, invoca el Lambda Authorizer. El autorizer extrae el token del encabezado de la solicitud y verifica su validez comunicándose con el IdP.

Autorización con Políticas IAM:

Una vez que se valida el token, el Lambda Authorizer también determina qué acciones puede realizar el usuario. Esto se hace especificando políticas IAM dentro del autorizer.

Estas políticas IAM dictan qué recursos de AWS puede acceder el usuario y qué acciones puede realizar. Por ejemplo, un usuario podría tener permiso para leer datos de una base de datos, pero no para escribir en ella. Luego, el API Gateway verifica estas políticas con AWS IAM para asegurar el cumplimiento.

Invocación del Backend:

Si la política IAM permite la acción solicitada, el API Gateway procede a invocar el servicio backend previsto, que podría ser otra función Lambda, un servicio de AWS o cualquier otro recurso.
En esta etapa, la solicitud del usuario se procesa y recibe la respuesta deseada.

Nota Especial

Es importante recordar que el Lambda Authorizer no necesita validar el token para cada llamada a la API. Para mejorar el rendimiento y reducir la latencia, puedes implementar un caché para las respuestas del autorizer. Esto significa que una vez que se valida un token, las solicitudes posteriores con el mismo token pueden procesarse más rápido.

Comprender este flujo de autenticación es vital para cualquier persona que trabaje con arquitecturas sin servidor. Tómate el tiempo para familiarizarte con cada paso, practica explicar el proceso y considera construir un pequeño proyecto que implemente estos conceptos. Este conocimiento no solo te ayudará en las entrevistas, sino que también te empoderará en aplicaciones del mundo real.

Plantilla de Terraform

Para ayudarte a implementar este flujo, aquí tienes una plantilla básica de Terraform que configura un API Gateway con un Lambda Authorizer:

  provider "aws" {
    region = "us-west-2"
  }
  resource "aws_lambda_function" "authorizer" {
    function_name = "LambdaAuthorizer"
    handler       = "authorizer.handler"
    runtime       = "nodejs14.x"
    role          = aws_iam_role.lambda_exec.arn
    source_code_hash = filebase64sha256("authorizer.zip")
  }
  resource "aws_iam_role" "lambda_exec" {
    name = "lambda_exec_role"
    assume_role_policy = jsonencode({
      Version = "2012-10-17"
      Statement = [{
        Action = "sts:AssumeRole"
        Principal = {
          Service = "lambda.amazonaws.com"
        } Effect = "Allow"
        Sid    = ""
      }]
    })
  }
  resource "aws_api_gateway_rest_api" "api" {
    name        = "MyAPI"
    description = "API Gateway con Lambda Authorizer"
  }
  resource "aws_api_gateway_resource" "resource" {
    rest_api_id = aws_api_gateway_rest_api.api.id parent_id = aws_api_gateway_rest_api.api.root_resource_id
    path_part   = "example"
  }
  resource "aws_api_gateway_method" "method" {
    rest_api_id   = aws_api_gateway_rest_api.api.id resource_id = aws_api_gateway_resource.resource.id http_method = "GET" authorization = "CUSTOM"
    authorizer_id = aws_api_gateway_authorizer.authorizer.id } resource "aws_api_gateway_authorizer" "authorizer" {
    rest_api_id = aws_api_gateway_rest_api.api.id name = "MyLambdaAuthorizer"
    authorizer_uri = "${aws_lambda_function.authorizer.invoke_arn}"
    type        = "REQUEST"
    identity_source = "method.request.header.Authorization"
  }
  output "api_endpoint" {
    value = "${aws_api_gateway_rest_api.api.invoke_url}/example"
  }
Enter fullscreen mode Exit fullscreen mode

Aquí encontrarás el repositorio de GitHub que contiene el código y las instrucciones.

Repositorio de GitHub - ¡Próximamente!

¿Listo para optimizar tus implementaciones de AWS?

Comienza a usar Terraform para gestionar tu infraestructura como código. Experimenta con el código proporcionado y comparte tus experiencias en los comentarios. Si te gustó este artículo, sígueme para más contenido sobre AWS y Terraform.

Tu participación es valiosa, y me encantaría saber de ti.

Top comments (0)