Buenas prácticas para administrar la lógica de reintentos con SMS o 2FA

July 27, 2021
Redactado por
Revisado por

Copy of C04 Blog Text (4).png

Los seres humanos son criaturas impacientes, por lo que, aunque la verificación por SMS o los códigos de autenticación de dos factores (2FA) pueden llegar rápidamente en la mayoría de las partes del mundo, siempre recomendamos crear topes de reintento en los flujos de trabajo de verificación. Esto ayuda a prevenir lo siguiente:

  • Enviar mensajes de texto repetidos accidentalmente a un usuario
  • Superar los límites de tasa de API
  • Fraude telefónico o gastos innecesarios

Si bien las prácticas recomendadas de esta publicación están escritas con la API de Twilio Verify en mente, muchas se aplican independientemente de su proveedor de 2FA. Junto con otras prácticas recomendadas, como la creación de una lista de códigos de país para realizar la verificación, estos pasos pueden ayudar a garantizar que su flujo de trabajo de verificación de usuario sea lo más fluido posible.

Este proyecto también está disponible para la implementación rápida en el intercambio de códigos Twilio, no se necesita ningún código.

Inicie una aplicación de demostración con las prácticas recomendadas de reintento de SMS

Creé una aplicación que muestra las prácticas recomendadas descritas en esta publicación. La aplicación se inicia rápidamente, ya que está diseñada con Twilio Functions, el entorno sin servidores de Twilio. Puede iniciar la suya siguiendo estas instrucciones.

Los requisitos previos incluyen:

  • Node.js
  • Una cuenta de Twilio gratuita (regístrese gratis mediante este enlace y reciba USD 10 en crédito cuando actualice su cuenta)
  • Un servicio de Verify. Cree uno en la Consola de Twilio.

Clone o descargue el proyecto de muestra en mi GitHub:

git clone https://github.com/robinske/verify-retry.git && cd verify-retry

Instale las dependencias con npm install. A continuación, cambie el nombre del archivo de .env.example a .env (por seguridad, el archivo .env es parte de .gitignore y no se confirmará en la fuente) y complete las variables con el SID de su cuenta y el token de autenticación, que se pueden encontrar en la Consola de Twilio. Complete el SID de servicio de Verify que creó antes:

# find in the twilio console: https://twilio.com/console
ACCOUNT_SID=
AUTH_TOKEN=

# create one in the twilio console: https://twilio.com/console/verify/services
VERIFY_SERVICE_SID=

Inicie el proyecto con npm start y vaya a http://localhost:3000/index.html para probarlo.

Prácticas recomendadas para reintentar los códigos SMS o 2FA

Implemente los tiempos de espera en el botón resend (reenviar)

Agregue un búfer entre reintentos para evitar el comportamiento incorrecto o el envío accidental de varios códigos. Recomendamos comenzar con 30 segundos.

grayed out resend code option that says "resend code in 22 seconds"

En la demostración, hacemos la cuenta regresiva desde el tiempo máximo de espera y mantenemos el botón desactivado hasta que el tiempo de espera haya expirado. Para una alternativa menos animada, puede hacer lo siguiente:

  • mostrar la cuenta regresiva con 5 segundos restantes
  • atenuar el botón Resend (Reenviar) hasta que el tiempo de espera haya expirado con una copia que indica el búfer total (sin la cuenta regresiva)
  • solo mostrar el enlace de reintento una vez que haya expirado el tiempo de espera

Realice un seguimiento de los reintentos

La API de Verify incluye una lista de intentos de verificación en la respuesta, que puede utilizar para aumentar el búfer de reintentos con cada intento adicional. También puede utilizar la cantidad de intentos para aplicar sus propios límites de tasa además de verificar los límites de tasa de API de Verify (5 verificaciones comienzan en un período de 10 minutos).

En esta función se puede ver un ejemplo de aumento del tiempo de espera con más intentos. El tiempo de espera predeterminado aquí es el máximo (10 minutos), que puede ayudar a evitar que su aplicación alcance los límites de tasa de API.

function getRetryTimeout(attemptNumber) {
 const retryTimeouts = {
   1: 30,
   2: 40,
   3: 60,
   4: 90,
   5: 120,
 };

 return retryTimeouts[attemptNumber] || 600;
}

Prácticas recomendadas para los canales de reserva

Ofrezca canales alternativos, como Voice, en el tercer intento de verificación

Las llamadas de voz tienen prioridad en las redes de telefonía y pueden ayudar a garantizar que sus clientes reciban un código de verificación. Sin embargo, el canal de voz puede usarse incorrectamente para el fraude telefónico, por lo que, a menos que se detecte un teléfono fijo o se tenga un caso de negocio para las llamadas, recomendamos esperar a exponer este canal hasta el tercer o cuarto intento de enviar un SMS o desactivarlo por completo.

Muestre una opción “Call me instead” (Prefiero que me llamen) en su experiencia de usuario una vez que se hayan realizado varios intentos de SMS:

one time passcode input field with a grayed out resend code message and a clickable link that says "having trouble receiving SMS, call me instead"

Detecte teléfonos fijos

Además de utilizar la API Lookup de Twilio para detectar números de teléfono no válidos, puede utilizar la API para detectar números de teléfono fijos y utilizar el canal call para estos números en lugar de predeterminarlos a SMS.

Si ingresa un teléfono fijo en el proyecto de ejemplo, llamará automáticamente en lugar de enviar un mensaje de texto de código de verificación.

one time passcode input field with a message that says "landline detected. sent call verification"

Desactive los canales no utilizados en la consola de Twilio

Si desea desactivar por completo ciertos canales, puede hacerlo en la sección Verify (Verificar) de la consola de Twilio.

twilio verify console showing disabled call and email channel toggles

Implemente el reCAPTCHA para llamadas de voz

Implemente el reCAPTCHA para ayudar a detectar y evitar bots en su flujo de verificación. Obtenga más información sobre cómo implementar esta función en la documentación del desarrollador de Google.

Agregar límites de tasa adicionales

La API de Twilio Verify admite límites de tasa programables que puede aplicar a segmentos específicos según la solicitud, como una dirección IP, una geolocalización o un código de país.

Prácticas recomendadas para la verificación general del usuario

La lógica de reintentos es un componente de la creación de un flujo de trabajo de verificación de usuario sin interrupciones. Algunas de las prácticas recomendadas incluyen:

1. Utilizar la API Lookup de Twilio para detectar números y tipos de línea no válidos antes de enviar una verificación

Además de usar el Lookup de operador para identificar teléfonos fijos, Lookup se puede utilizar para identificar números no válidos antes de intentar enviar un código de verificación.

2. Crear una lista de países permitidos o bloqueados

Usar una lista de países permitidos en el momento de la inscripción es una buena forma de garantizar que se respetan los requisitos de cumplimiento, ya que se reduce el fraude o se controla el proceso de incorporación.

3. Mostrar los números de teléfono completos para la verificación inicial del usuario

Para los casos de uso de la verificación telefónica (a diferencia del inicio de sesión continuo o la autenticación de dos factores), muestre el número de teléfono completo en la interfaz para que el usuario pueda detectar y corregir cualquier error tipográfico.

one time passcode input field with message that shows complete phone number with option to edit.

4. Ocultar números de teléfono para iniciar sesión en curso o autenticación de dos factores

Una vez que se haya verificado el número de teléfono la primera vez, los usos posteriores deben enmascarar el número de teléfono para evitar pérdidas de PII. A diferencia de lo anterior, no existe la opción de editar un número de teléfono para la autenticación constante. Recomendamos que deje visible 3 o 4 números y oculte el resto como +1 (5**) ***-**67 o ********567.

one time passcode input field with message that shows obfuscated phone number and no option to edit.

Opcional: implemente el proyecto con Twilio Functions

Para implementar este proyecto con Twilio Functions necesitará lo siguiente:

Una vez que instale esas dependencias, puede implementar este proyecto ejecutando el siguiente comando desde la carpeta verify-retry:

twilo serverless:deploy

Próximos pasos con la verificación de usuario

Como dijo la investigadora de privacidad utilizable, Miranda Wei, debemos pensar en crear seguridad utilizable como una forma de “servicio al cliente en la que los usuarios intentan alcanzar la seguridad, y eso es algo que cambia constantemente. No es algo que solo debe configurar una vez y olvidarse”. Estas prácticas recomendadas son un buen comienzo, pero sugerimos monitorear sus costos de soporte y la satisfacción del usuario para asegurarse de estar proporcionando la mejor solución a medida que su producto y su tecnología de autenticación evolucionan.

Para obtener más recursos, es posible que desee consultar lo siguiente:

Estoy ansioso por ver lo que es capaz de crear y asegurar con Twilio.

Este artículo ha sido traducido del original "Best practices for managing retry logic with SMS 2FA". Mientras continuamos con los procesos de traducción, nos encantaría recibir sus comentarios en help@twilio.com - Buenas contribuciones pueden generar regalos de Twilio.