Implementación de Authorizer con Auth0 en AWS Lambda
Clase 20 de 30 • Curso de Ciberseguridad para Desarrollo Web
Resumen
¿Cómo configuramos Auth0 para autorizar aplicaciones?
Antes de profundizar en la implementación del autorizer, asegúrate de que tu configuración de Auth0 esté correctamente establecida. En la sección de Applications de Auth0, verifica que tengas dos aplicaciones: una para la web y otra que se genera automáticamente al crear el API. Asegúrate de que la aplicación web sea regular y que el URL de callback redirija a Google. Además, las conexiones deben estar activadas para la base de datos que creaste con tus usuarios.
¿Cómo ajustar la configuración de APIs en Auth0?
En la pestaña de APIs, selecciona tu API (por ejemplo, MyCourseAPI) y revisa los settings. Prestamos atención al identifier, que usarás para las solicitudes de tokens. Importante: asegúrate de que la API esté correctamente apuntando a tu aplicación principal (MyApp) y desactiva la aplicación de prueba, si es necesario.
¿Cómo implementamos un Lambda Authorizer?
Usaremos un Lambda Authorizer para gestionar la autorización de acceso a nuestro servicio. El authorizer recibe solicitudes distintas y debe devolver una respuesta adecuada según lo configurado: aceptando o denegando acceso.
¿Cuál es la estructura de nuestro autorizer?
- Carpeta y Archivo Principal: Crea una carpeta para el autorizer y añade un archivo main para la lógica principal.
- Método Main: Este método principal gestionará la solicitud y determinará si acepta o deniega basándose en el token.
- Métodos de Respuesta: Implementa métodos para aceptar o denegar requests, devolviendo una respuesta de política que autoriza o bloquea acceso.
¿Qué lógica se implementa para getMetrics?
Añadimos una función handler para recibir y procesar eventos. Utilizamos el tipo de evento de API Gateway V2 Custom Authorizer. Este incluye rutas y permite validar y autenticar tokens usando la librería GoJose, facilitando la validación de JWTs.
Implementación del código de autorizer
// Handler para autorizer
func handler(event events.APIGatewayV2CustomAuthorizerIAMContextRequest) (events.APIGatewayV2CustomAuthorizerIAMContextResponse, error) {
// Obteniendo la ruta del evento
path := event.RequestContext.HTTP.Path
// Validando el token
authToken := extractAuthToken(event)
if isValidToken(authToken) {
return allowRequest(path), nil
}
return denyRequest("Invalid auth token"), nil
}
¿Cómo configuramos y desplegamos con Terraform?
Con el autorizer listo, seguimos con la creación y configuración de un archivo make para facilitar la compilación y carga de nuestro binario a AWS S3.
- Makefile y Compilación: Copia la configuración del make file existente y ajusta el nombre para authorizer.
- Sincronización de dependencias: Usa
go mod vendor
ygo mod download
para asegurarte de que todas las dependencias estén actualizadas y disponibles. - Subida a AWS S3: Usa
make publish
una vez que la compilación esté lista.
¿Cómo finalizamos la integración en AWS?
Para completar la integración y configuración:
- Crear y configurar Lambda con Terraform: Con
terraform plan
revisa el plan de despliegue y luego lo ejecutas conterraform apply
. - Conectar con API Gateway: Una vez desplegado, ve a AWS API Gateway y asocia el authorizer a un endpoint (como getMetrics).
¿Cómo generamos y validamos un token de acceso?
Genera un token de acceso utilizando tu client ID y dominio de aplicación definido en Auth0. Valida este token usando una herramienta como Postman para send requests a tus endpoints protegidos, asegurando que la autenticación funciona correctamente.
¿Qué se debe tener en cuenta al gestionar errores y mensajes?
Si un token es inválido o falta, asegura que tus mensajes de error sean claros y comprensibles, facilitando tanto depuración como el uso de tus APIs a los desarrolladores.