Esecuzione della verifica SMS su un server

Per verificare automaticamente i numeri di telefono, devi implementare entrambe le parti del client e server del flusso di verifica. Questo documento descrive come implementare la parte relativa al server.

Il server di verifica del numero di telefono è responsabile di tre attività:

  1. Creare un messaggio di verifica che includa un codice monouso e abbia il formato previsto dall'API SMS Retriever lato client
  2. Invio del messaggio di verifica al dispositivo dell'utente
  3. Verificare il codice monouso quando viene reinviato al server e completare eventuali attività post-verifica richieste dal backend

Le specifiche relative alla modalità di interazione dell'app con il server dipendono da te. Un approccio comune è esporre un'API REST con due endpoint: uno che riceve richieste di verifica di un determinato numero di telefono e invia gli SMS di verifica, e un secondo endpoint che riceve i codici monouso dalla tua app.

1. Creare un messaggio di verifica

Quando il tuo server riceve una richiesta per verificare un numero di telefono, crea innanzitutto il messaggio di verifica che invierai al dispositivo dell'utente. Questo messaggio deve:

  • Non devono superare i 140 byte.
  • Contenere un codice monouso che il client restituisce al tuo server per completare il flusso di verifica (consulta la sezione Generare un codice monouso).
  • Includi una stringa hash di 11 caratteri che identifichi la tua app (consulta la sezione Calcolo della stringa hash dell'app).

In caso contrario, puoi scegliere qualsiasi contenuto del messaggio di verifica. È utile creare un messaggio da cui poter estrarre facilmente il codice monouso in un secondo momento. Ad esempio, un messaggio di verifica valido potrebbe avere il seguente aspetto:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Generazione di un codice monouso

Puoi implementare i codici monouso in molti modi, a condizione che i codici non siano decifrabili e che tu possa collegarli a un utente o a un numero di telefono quando l'app client li invia al tuo server. Dovresti rendere i codici facili da digitare, per rispondere a tutte le situazioni che potrebbero richiedere agli utenti di digitare manualmente il codice.

Un modo per implementare i codici monouso consiste nel generare numeri casuali da utilizzare come chiavi in una tabella di database. Ad esempio, potresti avere una tabella PendingVerificas come la seguente:

ID Utente Scadenza
123456789... 1234 14/3/2017 1:59

Puoi utilizzare l'ID con codifica Base32 come codice monouso.

Calcolo della stringa hash della tua app

Google Play Services utilizza la stringa hash per determinare quali messaggi di verifica inviare alla tua app. La stringa hash è composta dal nome del pacchetto dell'app e dal certificato di chiave pubblica dell'app. Per generare la stringa hash:

  1. Se utilizzi la firma dell'app di Google Play, scarica il certificato di firma dell'app (deployment_cert.der) dalla sezione Firma dell'app di Google Play Console.

    Quindi, importa il certificato di firma dell'app in un archivio chiavi temporaneo:

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

    Se firmi direttamente gli APK, salta questo passaggio.

  2. Ottieni il certificato di firma dell'app (quello importato in alto o quello che utilizzi per firmare direttamente gli APK) come stringa esadecimale minuscola.

    Ad esempio, per recuperare la stringa esadecimale dall'archivio chiavi temporaneo creato in precedenza, digita il seguente comando:

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

    Se firmi direttamente gli APK, specifica l'archivio chiavi e l'alias del certificato di produzione.

  3. Se hai creato un archivio chiavi temporaneo, eliminalo.

  4. Aggiungi la stringa esadecimale al nome del pacchetto dell'app, separati da un singolo spazio.

  5. Calcola la somma SHA-256 della stringa combinata. Assicurati di rimuovere eventuali spazi vuoti iniziali o finali dalla stringa prima di calcolare la somma SHA-256.

  6. Codifica Base64 il valore binario della somma SHA-256. Potresti dover prima decodificare la somma SHA-256 dal relativo formato di output.

  7. La stringa hash della tua app è costituita dai primi 11 caratteri dell'hash con codifica Base64.

Il seguente comando calcola la stringa hash dal keystore di produzione dell'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

In alternativa, puoi recuperare la stringa hash dell'app con la classe AppSignatureHelper dall'app di esempio SMS Retriever. Tuttavia, se utilizzi la classe helper, assicurati di rimuoverla dall'app dopo aver ottenuto la stringa hash. Non utilizzare stringhe di hash calcolate in modo dinamico sul client nei messaggi di verifica.

2. Invia il messaggio di verifica tramite SMS

Dopo aver creato il messaggio di verifica, invialo al numero di telefono dell'utente utilizzando qualsiasi sistema SMS.

Ad esempio, consulta la sezione Verifica delle app mediante Twilio SMS sul sito per sviluppatori di Twilio.

Quando il dispositivo dell'utente riceve questo messaggio, questo viene indirizzato alla tua app. L'app estrae il codice monouso e lo invia al tuo server per completare la procedura di verifica.

3. Verifica il codice monouso quando viene restituito

In genere, un server di verifica del numero di telefono dispone di un secondo endpoint che utilizza per ricevere i codici una tantum dalle app client. Quando il server riceve un codice monouso dalla tua app in questo endpoint, segui questi passaggi:

  1. Verifica che il codice monouso sia valido e che non sia scaduto.
  2. Registra che l'utente collegato al codice monouso ha completato la verifica del numero di telefono.
  3. Rimuovi il record di database del codice monouso o, in qualche altro modo, assicurati che lo stesso codice non possa essere utilizzato di nuovo.

Quando registri lo stato di verifica dell'utente e rimuovi il codice monouso dal database, la verifica viene completata.