DEV Community

Cover image for Validación de tokens de reCAPTCHA en Lambda de AWS
Danniel Navas
Danniel Navas

Posted on

Validación de tokens de reCAPTCHA en Lambda de AWS

El reCAPTCHA de Google es una herramienta que ayuda a proteger tus sitios web y aplicaciones de spam y ataques automatizados. Cuando se implementa en el frontend, el reCAPTCHA genera un token que el usuario debe proporcionar al backend para validar que es un usuario humano.

En este artículo, veremos cómo validar un token de reCAPTCHA en una Lambda de AWS.

Pasos previos

Antes de comenzar, necesitamos crear los siguientes recursos:

Un proyecto de Node.js
La dependencia axios
Una variable de entorno RECAPTCHA_SECRET_KEY en la Lambda
Para crear un proyecto de Node.js, podemos usar el siguiente comando:
pnpm init

Para instalar axios, podemos usar el siguiente comando:
pnpm install axios

Para crear la variable de entorno RECAPTCHA_SECRET_KEY, podemos ir a la configuración de la Lambda y agregar la siguiente entrada:

KEY=RECAPTCHA_SECRET_KEY
VALUE=secret_key_here

Código de la Lambda

El siguiente código muestra cómo validar un token de reCAPTCHA en una Lambda:

const axios = require("axios");

exports.handler = async (event) => {
  try {
    const { token } = JSON.parse(event.body);
    if (!token) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: "No token provided" }),
      };
    }

    const secret = process.env.RECAPTCHA_SECRET_KEY;
    const url = `https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${token}`;

    const response = await axios.get(url, {
      timeout: 5000,
    });

    if (!response.data) {
      return {
        statusCode: 500,
        body: JSON.stringify({ message: "Error fetching reCAPTCHA response" }),
      };
    }

    const { success } = response.data;

    if (!success) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: "Invalid token" }),
      };
    }

    return {
      statusCode: 200,
      body: JSON.stringify({ success }),
    };
  } catch (error) {
    return {
      statusCode: 500,
      body: JSON.stringify({ message: error.message }),
    };
  }
};
Enter fullscreen mode Exit fullscreen mode

Lo que realiza el código seria lo siguiente:

Primero, el código verifica si el token está presente en el evento de entrada. Si no lo está, devuelve un error.
Luego, el código obtiene el secreto de reCAPTCHA de la variable de entorno.
A continuación, el código crea una URL para la API de verificación de reCAPTCHA.
Luego, el código envía una solicitud GET a la API de verificación de reCAPTCHA.
Finalmente, el código comprueba la respuesta de la API. Si la respuesta indica que el token es válido, el código devuelve un código de estado 200. Si la respuesta indica que el token no es válido, el código devuelve un código de estado 400.

Top comments (0)