Realizar la verificación por SMS en un servidor

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

El servidor de verificación de teléfono es responsable de tres tareas:

  1. Crear un mensaje de verificación que incluya un código de un solo uso y tenga el formato que espera la API de SMS Retriever del lado del cliente.
  2. Enviar 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 su backend

Los detalles de cómo interactúa su aplicación con el servidor dependen de usted. Un enfoque común es exponer una API REST con dos puntos finales: 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 punto final que recibe códigos únicos de su aplicación.

1. Construya un mensaje de verificación

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

De lo contrario, el contenido del mensaje de verificación puede ser lo que elija. Es útil crear un mensaje del que pueda extraer fácilmente 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

Generando un código de una sola vez

Puede implementar códigos de un solo uso de muchas maneras, siempre que los códigos sean imposibles de adivinar y pueda vincular los códigos a un usuario o número de teléfono cuando la aplicación cliente los envíe de vuelta a su servidor. Debe hacer que los códigos sean fáciles de escribir, para adaptarse a cualquier situación que pueda requerir que los usuarios escriban el código manualmente.

Una forma de implementar códigos de un solo uso es generar números aleatorios, que se utilizan como claves en una tabla de base de datos. Por ejemplo, puede tener una tabla Verificaciones pendientes como la siguiente:

IDENTIFICACIÓN Usuario Vencimiento
123456789 ... 1234 2017-3-14 1:59

Puede utilizar el ID codificado en base32 como un código de un solo uso.

Calcular la cadena hash de su aplicación

Los servicios de Google Play utilizan la cadena hash para determinar qué mensajes de verificación enviar a su aplicación. La cadena hash está formada por el nombre del paquete de su aplicación y el certificado de clave pública de su aplicación. Para generar la cadena hash:

  1. Si usa la firma de aplicaciones de Google Play , descargue su certificado de firma de aplicaciones ( deployment_cert.der ) desde la sección de firma de aplicaciones de la consola de Google Play .

    Luego, importe el certificado de firma de la aplicación 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 aplicación, ya sea el que importaste anteriormente o el que usas para firmar tus APK directamente, como una cadena hexadecimal en minúscula.

    Por ejemplo, para obtener la cadena hexadecimal del almacén de claves temporal creado anteriormente, escriba 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 alias de certificado.

  3. Si creó un almacén de claves temporal, elimínelo.

  4. Agrega la cadena hexadecimal al nombre del paquete de tu aplicación, separada por un espacio.

  5. Calcule la suma SHA-256 de la cadena combinada. Asegúrese de eliminar cualquier espacio en blanco inicial o final de la cadena antes de calcular la suma SHA-256.

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

  7. La cadena hash de su aplicación son los primeros 11 caracteres del hash codificado en base64.

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

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

Alternativamente, puede obtener la cadena hash de su aplicación con la clase AppSignatureHelper de la aplicación de muestra de SMS Retriever. Sin embargo, si usa la clase auxiliar, asegúrese de eliminarla de su aplicación después de obtener la cadena hash. No utilice cadenas hash calculadas dinámicamente en el cliente en sus mensajes de verificación.

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

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

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

Cuando el dispositivo del usuario recibe este mensaje, el mensaje se dirige a su aplicación. Su aplicación extrae el código de un solo uso y lo envía de vuelta a su servidor para completar el proceso de verificación.

3. Verifique el código de un solo uso cuando se devuelva.

Un servidor de verificación de número de teléfono generalmente tiene un segundo punto final que utiliza para recibir códigos únicos de las aplicaciones cliente. Cuando su servidor reciba un código único de su aplicación en este punto final, haga lo siguiente:

  1. Verifique que el código de un solo uso sea válido y no haya caducado.
  2. Registre que el usuario vinculado al código de un solo uso ha completado la verificación del número de teléfono.
  3. Elimine el registro de la base de datos del código de un solo uso o de alguna otra manera asegúrese de que el mismo código no se pueda volver a utilizar.

Cuando registra el estado de verificación del usuario y elimina el código único de su base de datos, la verificación está completa.