Cómo realizar la verificación por SMS en un servidor

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Para verificar automáticamente los números de teléfono, debes implementar las partes del cliente y del servidor del flujo de verificación. En este documento, se describe cómo implementar la parte del servidor.

El servidor de verificación telefónica es responsable de tres tareas:

  1. Construye un mensaje de verificación que incluya un código único y tenga el formato que espera la API de SMS Retriever del cliente
  2. Enviando el mensaje de verificación al dispositivo del usuario
  3. Verificar el código único cuando se envía al servidor y completar las tareas posteriores a la verificación que requiere el backend

Los detalles de cómo interactúa tu app con el servidor dependen de ti. Un enfoque común es exponer una API de REST con dos extremos: uno que recibe solicitudes para verificar un número de teléfono determinado y envía mensajes de verificación por SMS, y otro que recibe códigos únicos de tu app.

1. Crea un mensaje de verificación

Cuando el servidor recibe una solicitud para verificar un número de teléfono, primero crea el mensaje de verificación que enviarás al dispositivo del usuario. Este mensaje debe hacer lo siguiente:

De lo contrario, el contenido del mensaje de verificación puede ser el que elijas. Resulta útil crear un mensaje a partir del cual puedas extraer fácilmente el código único más adelante. Por ejemplo, un mensaje de verificación válido podría verse de la siguiente manera:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Cómo generar un código único

Puedes implementar códigos de un solo uso de muchas formas, siempre y cuando los códigos no sean posibles y puedas vincularlos a un usuario o número de teléfono cuando la app cliente los envíe de vuelta al servidor. Debes hacer que los códigos sean fáciles de escribir para adaptarse a cualquier situación que requiera que los usuarios escriban el código manualmente.

Una forma de implementar códigos únicos es generar números aleatorios, que usas como claves en una tabla de base de datos. Por ejemplo, puedes tener una tabla PendingVerifications como la siguiente:

ID Usuario Vencimiento
123456789... 1234 2017-3-14 1:59

Puedes usar el ID codificado en base32 como código único.

Calculando la string hash de tu app

Los Servicios de Google Play usan la string de hash para determinar qué mensajes de verificación se deben enviar a tu app. La string de hash está formada por el nombre del paquete y el certificado de clave pública de tu app. Para generar la string de hash, haz lo siguiente:

  1. Si usas la firma de apps de Google Play, descarga tu certificado de firma de apps (deployment_cert.der) de la sección Firma de apps de Google Play Console.

    Luego, importa el certificado de firma de la app a un almacén de claves temporal:

    keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
    

    Si firmas tus APK directamente, omite este paso.

  2. Obtén el certificado de firma de tu app, el que importaste antes o el que usas para firmar tus APK directamente, como una string hexadecimal en minúsculas.

    Por ejemplo, para obtener la string hexadecimal del almacén de claves temporal creado antes, escribe el siguiente comando:

    keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
    

    Si firmas tus APK directamente, especifica tu almacén de claves de producción y tu alias de certificado.

  3. Si creaste un almacén de claves temporal, bórralo.

  4. Agrega la string hexadecimal al nombre del paquete de tu app, separada por un solo espacio.

  5. Calcula la suma SHA-256 de la string combinada. Asegúrate de quitar los espacios en blanco iniciales o finales de la string antes de calcular la suma SHA-256.

  6. Codifica en base64 el valor binario de la suma SHA-256. Es posible que primero debas decodificar la suma SHA-256 de su formato de salida.

  7. La string de hash de tu app son los primeros 11 caracteres del hash codificado en base64.

El siguiente comando calcula la string de hash del almacén de claves de producción de tu app:

keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

Como alternativa, puedes obtener la string hash de tu app con la clase AppSignatureHelper desde la app de ejemplo del buscador de SMS. Sin embargo, si usas la clase auxiliar, asegúrate de quitarla de tu app después de obtener la string hash. No uses strings de hash calculadas de manera dinámica en el cliente en tus mensajes de verificación.

2. Envía el mensaje de verificación por SMS

Después de crear el mensaje de verificación, envía el mensaje al número de teléfono del usuario mediante cualquier sistema de SMS.

Por ejemplo, consulta Verificación de aplicaciones con SMS de Twilio en el sitio para desarrolladores de Twilio.

Cuando el dispositivo del usuario recibe este mensaje, el mensaje se dirige a tu app. La app extrae el código único y lo envía de vuelta al servidor para completar el proceso de verificación.

3. Verificar el código único cuando se muestra

Por lo general, un servidor de verificación de número de teléfono tiene un segundo extremo que usa para recibir códigos únicos de las aplicaciones cliente. Cuando el servidor recibe un código único de tu app en este extremo, haz lo siguiente:

  1. Verifica que el código único sea válido y no haya caducado.
  2. Registra que el usuario vinculado al código de uso único completó la verificación del número de teléfono.
  3. Quita el registro de base de datos de código único o asegúrate de que no se pueda volver a usar el mismo código de alguna otra manera.

La verificación se completa cuando registras el estado de verificación del usuario y quitas el código único de tu base de datos.