Realizar verificación de SMS en un servidor

Para verificar los números de teléfono automáticamente, 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. Generar un mensaje de verificación que incluya un código único y que tenga el formato que espera la API de SMS Retriever del cliente
  2. Envía el mensaje de verificación al dispositivo del usuario
  3. Verificar el código de un solo uso cuando se envía de vuelta al servidor y completar cualquier tarea posterior a la verificación que requiera tu backend

Tú decides los detalles sobre el modo en que tu app interactúa con el servidor. 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 los mensajes de verificación por SMS, y un segundo extremo que recibe los códigos únicos de la app.

1. Elaborar un mensaje de verificación

Cuando tu servidor reciba 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 cumplir con los siguientes requisitos:

De lo contrario, el contenido del mensaje de verificación puede ser el que elijas. Es útil crear un mensaje del que puedas extraer con facilidad el código de un solo uso más adelante. Por ejemplo, un mensaje de verificación válido podría tener el siguiente aspecto:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Cómo generar un código de uso único

Puedes implementar códigos únicos de muchas maneras, siempre y cuando no se puedan adivinar los códigos y puedas vincularlos a un usuario o número de teléfono cuando la app cliente los envíe de vuelta a tu servidor. Debes hacer que los códigos sean fáciles de escribir para que se adapten a cualquier situación en la que los usuarios deban escribir el código de forma manual.

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

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

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

Calcula la string de hash de tu app

Los Servicios de Google Play usan la string de hash para determinar qué mensajes de verificación enviar a tu app. La string de hash se compone del nombre del paquete y el certificado de clave pública de la app. Sigue estos pasos para generar la string de hash:

  1. Si usas la firma de apps de Google Play, descarga tu certificado de firma de apps (deployment_cert.der) desde 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 APKs directamente, omite este paso.

  2. Obtén el certificado de firma de la app, ya sea el que importaste antes o el que usas para firmar tus APKs directamente, como una cadena hexadecimal en minúscula.

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

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

    Si firmas tus APKs directamente, especifica el almacén de claves de producción y el alias del certificado.

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

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

  5. Calcula la suma SHA-256 de la string combinada. Asegúrate de quitar cualquier espacio en blanco inicial o final 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 la app son los primeros 11 caracteres del hash codificado en base64.

Con el siguiente comando, se calcula la string de hash desde el 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 de hash de la app con la clase AppSignatureHelper desde la app de ejemplo del SMS retriever. Sin embargo, si usas la clase auxiliar, asegúrate de quitarla de la app después de obtener la string de hash. No uses strings de hash que se calculan de forma dinámica en el cliente en tus mensajes de verificación.

2. Enviar el mensaje de verificación por SMS

Una vez que crees el mensaje de verificación, envíalo al número de teléfono del usuario mediante cualquier sistema de SMS.

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

Cuando el dispositivo del usuario recibe este mensaje, este se dirige a tu app, que extrae el código de un solo uso y lo devuelve al servidor para completar el proceso de verificación.

3. Verifica el código de uso único cuando se muestre

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 apps cliente. Cuando el servidor recibe un código único de la app en este extremo, haz lo siguiente:

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

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