Effectuer une vérification par SMS sur un serveur

Pour vérifier automatiquement les numéros de téléphone, vous devez implémenter les parties client et serveur du flux de vérification. Ce document décrit comment implémenter la partie serveur.

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

  1. Création d'un message de vérification qui inclut un code à usage unique et au format attendu par l'API SMS Retriever côté client
  2. Envoi du message de vérification à l'appareil de l'utilisateur
  3. Vérification du code à usage unique lorsqu'il est renvoyé au serveur et exécution de toutes les tâches de post-vérification requises par votre backend

Les spécificités de la façon dont votre application interagit avec le serveur dépendent de vous. Une approche courante consiste à exposer une API REST avec deux points de terminaison: un qui reçoit des demandes de vérification d'un numéro de téléphone donné et envoie les messages de vérification SMS, et un deuxième point de terminaison qui reçoit des codes à usage unique de votre application.

1. Construisez un message de vérification

Lorsque votre serveur reçoit une demande de vérification d'un numéro de téléphone, créez d'abord le message de vérification que vous enverrez à l'appareil de l'utilisateur. Ce message doit:

Sinon, le contenu du message de vérification peut être celui que vous choisissez. 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 vérification valide peut ressembler à ce qui suit:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Générer un code à usage unique

Vous pouvez implémenter des codes à usage unique de plusieurs manières, à condition que les codes soient impossibles à deviner et que vous puissiez lier les codes à un utilisateur ou à un numéro de téléphone lorsque l'application cliente les renvoie à votre serveur. Vous devez rendre les codes faciles à taper, pour s'adapter à toutes les situations qui pourraient obliger les utilisateurs à taper 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 avoir une table PendingVerifications comme celle-ci:

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

Vous pouvez utiliser l'ID encodé en base32 comme code à usage unique.

Calcul de la chaîne de hachage de votre application

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

  1. Si vous utilisez la signature d'applications par Google Play , téléchargez votre certificat de signature d'applications ( deployment_cert.der ) à partir de la section Signature d'applications de la console Google Play .

    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 directement vos fichiers APK, 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 fichiers APK) sous la forme d'une chaîne hexadécimale minuscule.

    Par exemple, pour obtenir la chaîne hexadécimale du fichier de clés temporaire créé ci-dessus, tapez la commande suivante:

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

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

  3. Si vous avez créé un fichier de clés temporaire, supprimez-le.

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

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

  6. Encode 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 est constituée des 11 premiers caractères du hachage encodé en base64.

La commande suivante calcule la chaîne de hachage à partir du magasin de clés 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 à partir de l'exemple d'application SMS Retriever. Cependant, si vous utilisez la classe d'assistance, assurez-vous de la supprimer de votre application après avoir obtenu la chaîne de hachage. N'utilisez pas de chaînes de hachage calculées dynamiquement sur le client dans vos messages de vérification.

2. Envoyez le message de vérification par SMS

Après avoir construit le message de vérification, envoyez le message au numéro de téléphone de l'utilisateur à l'aide de n'importe quel système SMS.

Par exemple, consultez Vérification d'application à l'aide de Twilio SMS sur le site des développeurs de Twilio.

Lorsque l'appareil de l'utilisateur reçoit ce message, le message est dirigé vers votre application. Votre application extrait le code à usage unique et le renvoie à votre serveur pour terminer le processus de vérification.

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

Un serveur de vérification de numéro de téléphone a généralement un deuxième point de terminaison qu'il utilise pour recevoir des codes à usage unique en retour des applications clientes. Lorsque votre serveur reçoit un code à usage unique de votre application à ce point de terminaison, procédez comme suit:

  1. Vérifiez que le code à usage unique est valide et n'a pas expiré.
  2. Enregistrez que l'utilisateur lié au code à usage unique a terminé la vérification du numéro de téléphone.
  3. Supprimez l'enregistrement de base de données du code à usage unique ou assurez-vous d'une autre manière que le même code ne peut pas être réutilisé.

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