Effectuer une vérification par SMS sur un serveur

Pour valider automatiquement les numéros de téléphone, vous devez implémenter les parties client et serveur du processus de validation. Ce document explique comment mettre en œuvre la partie serveur.

Le serveur de vérification du numéro de téléphone est responsable des trois tâches suivantes:

  1. Créer un message de vérification incluant un code à usage unique et dans le format attendu par l'API SMS Retriever côté client
  2. Envoi du message de validation sur l'appareil de l'utilisateur
  3. Vérifier le code à usage unique lorsqu'il est renvoyé au serveur et effectuer toutes les tâches de post-validation requises par votre backend

C'est à vous de décider des modalités d'interaction de votre application avec le serveur. Une approche courante consiste à exposer une API REST avec deux points de terminaison: un qui reçoit les requêtes de validation d'un numéro de téléphone donné et envoie les messages de validation par SMS, et un deuxième point de terminaison qui reçoit des codes à usage unique de votre application.

1. Créer un message de validation

Lorsque votre serveur reçoit une requête de validation d'un numéro de téléphone, commencez par rédiger le message de validation que vous allez envoyer à l'appareil de l'utilisateur. Ce message doit:

Sinon, vous pouvez choisir le contenu de votre choix. Il est utile de créer un message à partir duquel vous pourrez facilement extraire le code à usage unique ultérieurement. Par exemple, un message de validation valide peut ressembler à ceci :

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Générer un code unique

Vous pouvez implémenter des codes à usage unique de différentes manières, à condition qu'ils ne puissent pas être devinés, et que vous puissiez les associer à un utilisateur ou à un numéro de téléphone lorsque l'application cliente les renvoie à votre serveur. Vous devez faciliter la saisie des codes pour répondre aux situations dans lesquelles les utilisateurs peuvent être amenés à saisir manuellement le code.

Une façon d'implémenter des codes à usage unique consiste à générer des nombres aléatoires, que vous utilisez comme clés dans une table de base de données. Par exemple, vous pouvez obtenir un tableau "PendingVerifications" semblable à celui-ci:

ID Utilisateur Expiration
123456789... 1234 14/03/2017 1:59

Vous pouvez utiliser l'identifiant encodé en base32 en tant que code à usage unique.

Calculer la chaîne de hachage de votre application

Les services Google Play utilisent la chaîne de hachage pour déterminer les messages de validation à envoyer à votre application. La chaîne de hachage est composée du nom du package de votre application et de son certificat de clé publique. Pour générer la chaîne de hachage:

  1. Si vous utilisez la signature d'application Google Play, téléchargez votre certificat de signature d'application (deployment_cert.der) dans la section Signature d'application de la Google Play Console.

    Ensuite, importez le certificat de signature d'application dans un magasin de clés temporaire :

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

    Si vous signez vos APK directement, ignorez cette étape.

  2. Obtenez votre certificat de signature d'application (celui que vous avez importé ci-dessus ou celui que vous utilisez pour signer directement vos APK) sous la forme d'une chaîne hexadécimale en minuscules.

    Par exemple, pour obtenir la chaîne hexadécimale du keystore temporaire créé ci-dessus, saisissez la commande suivante :

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

    Si vous signez vos APK directement, spécifiez votre keystore de production et votre alias de certificat.

  3. Si vous avez créé un keystore temporaire, supprimez-le.

  4. Ajoutez la chaîne hexadécimale au nom du package de votre application, en les séparant par un seul espace.

  5. Calculez la somme SHA-256 de la chaîne combinée. Veillez à supprimer tout espace blanc de début ou de fin de la chaîne avant de calculer la somme SHA-256.

  6. Encodez en base64 la valeur binaire de la somme SHA-256. Vous devrez peut-être d'abord décoder la somme SHA-256 à partir de son format de sortie.

  7. La chaîne de hachage de votre application correspond aux 11 premiers caractères du hachage encodé en base64.

La commande suivante calcule la chaîne de hachage à partir du keystore de production de votre application:

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

Vous pouvez également obtenir la chaîne de hachage de votre application avec la classe AppSignatureHelper de l'application exemple SMS Retriever. Toutefois, si vous utilisez la classe d'assistance, veillez à la supprimer de votre application une fois la chaîne de hachage obtenue. N'utilisez pas de chaînes de hachage calculées dynamiquement sur le client dans vos messages de validation.

2. Envoyer le message de validation par SMS

Une fois que vous avez créé le message de vérification, envoyez-le au numéro de téléphone de l'utilisateur via n'importe quel système SMS.

Par exemple, consultez la section Vérification des applications à l'aide de Twilio SMS sur le site pour les développeurs de Twilio.

Lorsque l'appareil de l'utilisateur reçoit ce message, celui-ci est dirigé vers votre application. Celle-ci extrait le code à usage unique et le renvoie à votre serveur afin de terminer le processus de validation.

3. Vérifiez le code à usage unique lorsqu'il est renvoyé

Un serveur de validation des numéros de téléphone dispose généralement d'un deuxième point de terminaison qu'il utilise pour recevoir des codes uniques des applications clientes. Lorsque votre serveur reçoit un code unique de votre application à ce point de terminaison, procédez comme suit:

  1. Vérifiez que le code à usage unique est valide et qu'il n'a pas expiré.
  2. Notez que l'utilisateur associé au code à usage unique a terminé la validation du numéro de téléphone.
  3. Supprimez l'enregistrement de base de données du code à usage unique ou assurez-vous que le même code ne peut pas être réutilisé.

Lorsque vous enregistrez l'état de validation de l'utilisateur et supprimez le code à usage unique de votre base de données, la validation est terminée.