
Mejore su autenticación multifactor con Verify API y SIM Swap Insight
Tiempo de lectura: 8 minutos
Última actualización de este artículo: 4 de marzo de 2026
Introducción
Los ataques SIM Swap plantean muchos riesgos, entre ellos el robo y la usurpación de identidad. Este tutorial mostrará cómo mejorar la seguridad al restablecer contraseñas comprobando si se ha intercambiado la tarjeta SIM en el teléfono móvil y enviando un SMS para recuperar la cuenta. El flujo utiliza la Verify API para verificar un token y la API de Identity Insights para detectar si se ha intercambiado una tarjeta SIM en los últimos días. Si es así, no se enviará el código de verificación.
Nota: Las Network Powered Solutions están disponibles en los siguientes países y proveedores de servicios de comunicación (PSC)
Código fuente
El código fuente de la aplicación se puede encontrar en nuestro repositorio de GitHub.
Requisitos previos
Node.js y npm instalados en su máquina.
Un editor de código/texto y conocimientos básicos de JavaScript.
Vonage API Account To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Arquitectura de Applications
La aplicación sigue una arquitectura cliente-servidor. El cliente gestiona las interacciones del usuario mediante HTML y JavaScript, incluida la introducción de números de teléfono y el envío de códigos de verificación. El cliente y el servidor se comunican mediante peticiones GET/POST. El servidor, desarrollado en Node.js con Express, gestiona la lógica de backend, incluida la interfaz con las API Identity Insights y Verify v2 de Vonage para las comprobaciones de seguridad y la autenticación.
Crear un nuevo proyecto
Cree un nuevo proyecto y cambie a su directorio.
mkdir improve-your-auth && cd improve-your-auth Iniciar un nuevo proyecto Node
En el directorio de tu proyecto recién creado, inicializa un nuevo proyecto Node. Esto creará un nuevo archivo package.json nuevo. La bandera -y rellena automáticamente los valores por defecto sin preguntar por los detalles.
npm init -y Instalar las dependencias
Para instalar todas las dependencias de una sola vez, ejecute el siguiente comando. Se añadirán automáticamente a su archivo package.json y las instalará en el directorio node_modules de tu proyecto.
npm install @vonage/server-sdk @vonage/identity-insights dotenv express
Crear una nueva aplicación de Vonage
Ahora que hemos especificado las carpetas y dependencias que utilizaremos para el proyecto, es hora de crear una Aplicación de Vonage con capacidades Verify e Identity Insights.
Luego de inscribirte/obtener una cuenta de Vonagepuedes crear una nueva aplicación en el panel de control accediendo a Tus Applicationshaz clic en "Crear una nueva aplicación", asígnale un nombre, como "autenticación multifactor", y activa Verify V2 y Network Powered Solutions.
Nota: registra tu aplicación con Vonage y los proveedores de servicios de comunicación (CSP) antes de usar la API Identity Insights. Si tu registro ya está aprobado, puedes comenzar a construir tu solución de inmediato. De lo contrario, consulta nuestra guía sobre Registro en la red de Vonage para obtener más detalles.
Crear un par de claves pública/privada para la autenticación de la API; esto descargará un archivo private.key. Añade ese archivo a la carpeta de tu proyecto node.
Implementación en el servidor
Visión general de Identity Insights SIM Swap
El aspecto importante de la API Identity Insights que utilizaremos para esta demostración es su capacidad para comprobar si el canje se ha producido en los últimos días, lo que permite al usuario saber que puede haber habido un posible fraude si el canje no ha sido realizado por él.
SIM Swap insight refuerza los métodos de autenticación basados en SIM, incluidas las contraseñas de un solo uso por SMS y la autenticación silenciosa. Rastrea el último cambio de SIM de un número de móvil concreto y comprueba la fecha de activación de una tarjeta SIM en tiempo real.
Crear el archivo del servidor
El archivo server.js es nuestro script de servidor principal que se integra con las API Vonage Identity Insights y Verify v2 para autenticar a los usuarios de manera segura. También sirve las páginas web de nuestro panel bancario y gestiona el inicio de sesión y la verificación de los usuarios.
Configurar el cliente Identity Insights
Inicializamos dos clientes al inicio: el cliente principal de Vonage para Verify v2 y un cliente dedicado de IdentityInsights para las verificaciones de SIM Swap. Ambos se autentican utilizando tu ID de aplicación y clave privada, por lo que no es necesario gestionar tokens OAuth2 manualmente.
const { Vonage } = require("@vonage/server-sdk");
const { Auth } = require("@vonage/auth");
const { Channels } = require("@vonage/verify2");
const { IdentityInsights } = require("@vonage/identity-insights");
const vonage = new Vonage(
new Auth({
applicationId: APPLICATION_ID,
privateKey: keyContent,
})
);
const identityClient = new IdentityInsights({
applicationId: APPLICATION_ID,
privateKey: keyContent,
});
Comprobación de SIM Swap
La función checkSim comprueba si el número de teléfono se ha intercambiado recientemente utilizando el SDK de Identity Insights. He establecido una PERIOD variable de entorno que puedes establecer con el número de horas que hace que quieres comprobar si se ha producido el intercambio de SIM.
También puede utilizar SIM Swap Insight para obtener la fecha y hora del último intercambio de SIM realizado. Más información sobre cómo realizar una llamada API con SIM Swap Insight.
async function checkSim() {
try {
const resp = await identityClient.getIdentityInsights({
phoneNumber: phoneNumber,
purpose: "FraudPreventionAndDetection",
insights: {
simSwap: {
period: parseInt(PERIOD),
},
},
});
return resp.insights?.simSwap?.isSwapped === true;
} catch (error) {
console.warn("Identity Insights SDK call failed:", error && error.message);
}
}
Añadir Verify V2 API
En nuestro caso de uso, la API Verify V2 nos permite enviar un código de verificación al número de teléfono de un usuario si no se ha detectado ningún intercambio reciente de SIM.
Ruta de intercambio de SIM
La ruta /simswap realiza la comprobación del intercambio de SIM por separado, de modo que el cliente puede manejar el resultado antes de decidir si solicita un código de verificación:
app.post("/simswap", async (req, res) => {
phoneNumber = req.body.phone;
try {
const simSwapped = await checkSim();
res.json({
swapped: simSwapped,
});
} catch (error) {
console.error("Error checking SIM swap:", error);
res.status(500).json({ message: "Error processing request." });
}
});
Solicitud de verificación
A continuación, gestionamos una solicitud de verificación. Una vez que el cliente ha confirmado el resultado de la comprobación de SIM swap y el usuario decide continuar, enviamos un código de verificación utilizando la API Verify V2:
app.post("/sendcode", async (req, res) => {
const phone = process.env.RECIPIENT_NUMBER ? process.env.RECIPIENT_NUMBER : req.body.phone;
try {
const response = await vonage.verify2.newRequest({
brand: "Vonage Bank",
workflow: [
{
channel: Channels.SMS,
to: phone,
},
],
});
verifyRequestId = response.requestId;
res.json({
message: "Verification code sent.",
verifycode: true,
request_id: verifyRequestId,
});
} catch (error) {
console.error("Error during verification:", error);
res.status(500).json({ message: "Error processing request.", verifycode: false });
}
}); Presentación del PIN
Una vez que el usuario recibe su código, enviarlo es sencillo:
app.post("/verify", (req, res) => {
const { pin, newPass } = req.body;
vonage.verify2
.checkCode(verifyRequestId, pin)
.then((status) => {
if (status === "completed") {
const user = Object.values(users).find(user => user.username === "user1");
if (user) {
user.password = newPass;
} else {
res.status(404).json({ message: "User not found." });
return;
}
res.json({ message: "Success" });
} else {
res.json({ message: "Invalid verification code. Please try again." });
}
})
.catch((err) => {
console.error("Error during PIN verification:", err);
res.status(500).json({ message: "Error during PIN verification." });
});
});
Crear el archivo de variables de entorno
Cree un archivo .env para su proyecto y añada las variables de entorno que se encuentran en el siguiente fragmento de código. Consulta Michael's blog post para una maravillosa explicación del uso de variables de entorno en Node.js.
En VONAGE_API_SECRET y VONAGE_API_SECRET se pueden encontrar en el Panel de Vonage.
Vonage Dashboard
# Your Vonage application
VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY=/path/to/your/private.key
# Number of hours to check SIM Swap events
PERIOD=72
Implementación en el lado del cliente
Añadir el contenido y el estilo
En el archivo index.htmlañadiremos dos formularios: uno para introducir un número de teléfono y otro para iniciar sesión con un PIN. Este diseño permite al usuario autenticar su identidad de forma segura. Por simplicidad y claridad, voy a dejar la contraseña en texto plano. Por supuesto, en escenarios de la vida real/producción, necesitarás encriptar la contraseña y eventualmente añadir un valor Salt para reforzar la seguridad.
En el archivo archivo main.htmltendremos el panel de control de nuestro banco, al que se podrá acceder una vez que el usuario se haya identificado correctamente.
El archivo archivo style.css contiene los estilos para ambos archivos HTML. Puedes utilizar los estilos sencillos que he añadido para este proyecto, ¡o ser creativo y crear los tuyos propios!
Añadir el archivo client.js
En el archivo client.jsgestionamos el envío de formularios en nuestro sitio web. Gestiona los pasos en los que los usuarios introducen sus números de teléfono y reciben un código de verificación si su tarjeta SIM no se ha cambiado recientemente.
El script permite a los usuarios saber rápidamente si no pueden autenticarse debido a un reciente cambio de SIM o si recibirán un código para proceder al inicio de sesión. Esto garantiza que solo los usuarios con cuentas seguras puedan acceder a funciones sensibles.
Póngalo a prueba
Para ver todo en acción, inicie la aplicación ejecutando:
node server.js
A continuación, abre tu navegador web y navega hasta:
http://localhost:3000/
Esto es lo que debes esperar: imagina que has olvidado tu contraseña. Haz clic en "He olvidado la contraseña" para iniciar la recuperación. Se te pedirá que introduzcas tu número de teléfono y solicites la verificación.
Si la aplicación detecta un cambio reciente de SIM, aparece una advertencia: "Advertencia. Se ha producido un cambio reciente de emparejamiento de SIM para la Account móvil del Usuario. ¿Proceder?"Si no has iniciado este intercambio y eliges 'No, no he sido yo', es señal de que puede haber fraude con tu número. Esta es la señal para que te pongas en contacto con tu proveedor de telefonía móvil.
Nota: en la demostración, se le pide que confirme que ha cambiado la tarjeta SIM; en la vida real, probablemente se invitaría al usuario a ponerse en contacto directamente con el proveedor de servicios para realizar comprobaciones de identidad adicionales.
Del mismo modo, este enfoque podría aplicarse a la autenticación multifactorial en el inicio de sesión, donde se realizaría una comprobación antes de enviar el token de un solo uso; si se detecta un intercambio reciente de SIM, se invitaría al usuario a ponerse en contacto directamente con el proveedor de servicios para realizar comprobaciones de identidad adicionales.
Por otro lado, si intercambiaste tu SIM y seleccionaste "Sí, fui yo", la aplicación utiliza Verify API para enviar un código de verificación a tu teléfono. Introduce este código en la siguiente pantalla y establece una nueva contraseña. Una vez hecho esto, puedes utilizar tus nuevas credenciales para acceder a tu cuenta bancaria simulada.
Conclusión
Enhorabuena, ¡ha llegado al final de este tutorial! Ha aprendido a utilizar Verify API para verificar un token y SIM Swap Insight para detectar si el número de teléfono se ha intercambiado en los últimos días.
¿Tienes alguna pregunta o algo que compartir? Únete a la conversación en Slack de la comunidad de Vonagey mantente actualizado con el Boletín para desarrolladoressíguenos en X (antes Twitter)suscríbete a nuestro canal de YouTube para ver tutoriales en video, y sigue la página de página para desarrolladores de Vonage en LinkedInun espacio para que los desarrolladores aprendan y se conecten con la comunidad. Mantente conectado, comparte tu progreso y entérate de las últimas noticias, consejos y eventos para desarrolladores.
