Realizar verificación de SMS en un servidor

Para verificar automáticamente los números de teléfono, debes implementar el cliente y las partes 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. crear un mensaje de verificación que incluya un código de uso único y que el formato que espera la API de SMS Retriever del cliente
  2. Enviar el mensaje de verificación al dispositivo del usuario
  3. Verificar el código único 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 de cómo interactúa tu app con el servidor. Un problema común consiste en 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, además de un un segundo extremo que recibe códigos únicos de tu app.

1. Crea un mensaje de verificación

Cuando tu servidor reciba una solicitud para verificar un número de teléfono, primero debes crear el mensaje de verificación que enviarás al dispositivo del usuario. Este mensaje debe:

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

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Genera un código de uso único

Puedes implementar códigos de un solo uso de muchas maneras, siempre que sean indescifrable y puedes vincular los códigos a un usuario o a un número de teléfono cuando el cliente las envía de vuelta a tu servidor. Debes hacer que los códigos sean fáciles de escribir, adaptarse a cualquier situación que podría requerir que los usuarios escriban manualmente el código.

Una forma de implementar códigos únicos es generar números al azar, que se usan como claves en una tabla de base de datos. Por ejemplo, podrías tener un campo Pending Verifications tabla como la siguiente:

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

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

Cómo calcular la cadena hash de la app

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

  1. Si usas la firma de apps de Google Play, haz lo siguiente: descarga el certificado de firma de la app (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 cadena hexadecimal del almacén de claves temporal creado) arriba, escribe el siguiente comando:

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

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

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

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

  5. Calcula la suma SHA-256 de la cadena combinada. Asegúrate de quitar los espacios en blanco al inicio o al final de la cadena antes de calcular el hash SHA-256 .

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

  7. La cadena hash de la app corresponde a los primeros 11 caracteres del código con un hashtag.

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

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 cadena de hash de tu app con AppSignatureHelper de la app de ejemplo de SMS retriever. Sin embargo, si usas la clase auxiliar, asegúrate de quitarla de la app después de obtener la cadena de hash. No utilizar cadenas de hash calculadas de forma dinámica en el cliente en tus mensajes de verificación.

2. Enviar el mensaje de verificación por SMS

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

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

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

3. Cómo verificar el código de uso único cuando se muestre

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

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

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