Eseguire la verifica tramite SMS su un server

Per verificare automaticamente i numeri di telefono, è necessario implementare sia la parte client che quella server del flusso di verifica. Questo documento descrive come implementare la parte server.

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

  1. Creazione di 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 a al dispositivo dell'utente
  3. Verifica del codice monouso quando viene rispedito al server e completamento di tutte le attività di post-verifica richieste dal tuo backend

Le specifiche di come la tua app interagisce con il server dipende da te. Un approccio comune consiste nell'esposizione di un'API REST con due endpoint: uno che riceve richieste per verificare un determinato numero di telefono e invia i messaggi di verifica SMS e un secondo endpoint che riceve codici monouso dalla tua app.

1. Crea un messaggio di verifica

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

Altrimenti, il contenuto del messaggio di verifica può essere quello che scegli. È utile creare un messaggio da cui è possibile estrarre facilmente il codice monouso in un secondo momento. Ad esempio, un messaggio di verifica valido potrebbe essere simile al seguente:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Generazione di un codice monouso

Puoi implementare codici monouso in molti modi, a condizione che i codici non siano indovinabili e puoi collegare i codici a un utente o numero di telefono quando l'app client li invia al tuo server. È necessario rendere i codici facili da digitare, per adattarsi a qualsiasi situazione che potrebbe richiedere agli utenti di digitare manualmente il codice.

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

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

È possibile 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 della tua app e dal certificato della chiave pubblica della tua 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 della console di Google Play .

    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 i tuoi APK, salta questo passaggio.

  2. Ottieni il certificato di firma dell'app, quello che hai importato sopra o quello che utilizzi per firmare direttamente i tuoi APK, come stringa esadecimale minuscola.

    Ad esempio, per ottenere la stringa esadecimale dal keystore temporaneo creato sopra, digita il seguente comando:

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

    Se firmi direttamente i tuoi APK, specifica il keystore di produzione e l'alias del certificato.

  3. Se hai creato un keystore temporaneo, eliminalo.

  4. Aggiungi la stringa esadecimale al nome del pacchetto della tua app, separata da un singolo spazio.

  5. Calcola la somma SHA-256 della stringa combinata. Assicurati di rimuovere qualsiasi spazio bianco iniziale o finale dalla stringa prima di calcolare la somma SHA-256.

  6. Codifica in base64 il valore binario della somma SHA-256. Potrebbe essere necessario decodificare prima la somma SHA-256 dal formato di output.

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

Il comando seguente calcola la stringa hash dal keystore di produzione della tua 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 ottenere la stringa hash della tua app con la classe AppSignatureHelper dall'app di esempio del retriever SMS. Tuttavia, se usi la classe helper, assicurati di rimuoverla dalla tua app dopo aver ottenuto la stringa hash. Non utilizzare stringhe hash calcolate dinamicamente sul client nei messaggi di verifica.

2. Invia il messaggio di verifica tramite SMS

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

Ad esempio, vedere Verifica dell'app tramite Twilio SMS sul sito per sviluppatori di Twilio.

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

3. Verificare il codice monouso quando viene restituito

Un server di verifica del numero di telefono in genere ha un secondo endpoint che utilizza per ricevere i codici monouso dalle app client. Quando il tuo server riceve un codice monouso dalla tua app a questo endpoint, procedi come segue:

  1. Verificare che il codice monouso sia valido e non sia scaduto.
  2. Registra che l'utente collegato al codice monouso ha completato la verifica del numero di telefono.
  3. Rimuovere il record del database del codice monouso o in qualche altro modo assicurarsi che lo stesso codice non possa essere riutilizzato.

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