Per verificare automaticamente i numeri di telefono, devi implementare sia la parte client sia quella del server del flusso di verifica. Questo documento descrive come implementare la porzione del server.
Il server di verifica telefonica è responsabile di tre attività:
- Creazione di un messaggio di verifica che include un codice monouso e che abbia il formato previsto dall'API SMS Fetcher lato client
- Invio del messaggio di verifica al dispositivo dell'utente
- Verificare il codice monouso quando viene restituito al server e completare eventuali attività post-verifica richieste dal backend
Le specifiche relative alla tua modalità di interazione con il server dipendono da te. Un approccio comune consiste nell'esporre 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. Creare un messaggio di verifica
Quando il tuo server riceve una richiesta di verifica di 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
- Contengono un codice monouso che il client rimanda al tuo server per completare il flusso di verifica (consulta Generare un codice monouso)
- Includi una stringa hash di 11 caratteri che identifica l'app (vedi Modificare la stringa hash dell'app)
In caso contrario, i contenuti del messaggio di verifica possono essere quelli che preferisci. È utile creare un messaggio da cui 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: 123ABC78FA+9qCX9VSu
Generazione di un codice monouso
Puoi implementare i codici monouso in molti modi, a patto che i codici siano indecisibili e puoi collegarli a un utente o a un numero di telefono quando l'app client li invia al tuo server. Dovresti creare i codici di facile digitazione per gestire eventuali situazioni che potrebbero richiedere agli utenti di digitare il codice manualmente.
Un modo per implementare i codici monouso consiste nel generare numeri casuali, che vengono utilizzati come chiavi in una tabella di database. Ad esempio, potresti avere una tabella PendingVerifications simile alla seguente:
ID | Utente | Scadenza |
---|---|---|
123456789... | 1234 | 14-3-2017 1:59 |
Puoi utilizzare l'ID con codifica base32 come codice monouso.
Elaborazione della stringa hash dell'app
Google Play Services utilizza la stringa hash per determinare quali messaggi di verifica inviare all'app. La stringa hash è composta dal nome del pacchetto dell'app e dal certificato di chiave pubblica dell'app. Per generare la stringa hash:
Se utilizzi la firma dell'app di Google Play, scarica il certificato di firma della tua app (
deployment_cert.der
) dalla sezione Firma dell'app di Google Play Console.Quindi, importa il certificato di firma dell'app in un archivio di chiavi temporaneo:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Se firmi direttamente gli APK, salta questo passaggio.
Ottieni il certificato di firma dell'app, ovvero quello importato in precedenza o quello che usi per firmare direttamente gli APK, come stringa esadecimale minuscola.
Ad esempio, per ottenere la stringa esadecimale dall'archivio chiavi temporaneo creato sopra, digita il seguente comando:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
Se firmi gli APK direttamente, specifica l'archivio chiavi di produzione e l'alias certificato.
Se hai creato un archivio chiavi temporaneo, eliminalo.
Aggiungi la stringa esadecimale al nome del pacchetto dell'app, separandola con un singolo spazio.
Calcola la somma SHA-256 della stringa combinata. Assicurati di rimuovere tutto lo spazio vuoto iniziale o finale dalla stringa prima di eseguire il calcolo della somma di SHA-256.
Base64 codifica il valore binario della somma di SHA-256. Potrebbe essere necessario decodificare prima la somma SHA-256 dal suo formato di output.
La stringa hash della tua app è i primi 11 caratteri dell'hash codificato in base64.
Il comando seguente 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 di recupero SMS. Tuttavia, se utilizzi la classe helper, assicurati di rimuoverla dalla tua app dopo aver ricevuto la stringa hash. Non utilizzare stringhe hash calcolate in modo dinamico sul client nei tuoi messaggi di verifica.
2. Invia il messaggio di verifica via SMS
Dopo aver creato il messaggio di verifica, invia il messaggio al numero di telefono dell'utente utilizzando un qualsiasi sistema SMS.
Ad esempio, consulta la sezione Verifica app utilizzando Twilio SMS sul sito per sviluppatori di Twilio.
Quando il dispositivo dell'utente riceve questo messaggio, il messaggio viene indirizzato alla tua app. L'app estrae il codice una tantum e lo invia di nuovo al server per completare la procedura di verifica.
3. Verifica il codice monouso quando viene restituito
In genere un server di verifica dei numeri di telefono ha un secondo endpoint che utilizza per ricevere codici una tantum dalle app client. Quando il server riceve un codice monouso dalla tua app in questo endpoint, procedi nel seguente modo:
- Verifica che il codice monouso sia valido e non sia scaduto.
- Verifica che l'utente collegato al codice una tantum abbia completato la verifica del numero di telefono.
- Rimuovi il record del database unico del codice o, in qualche altro modo, assicurati che lo stesso codice non possa essere riutilizzato.
Quando registri lo stato di verifica dell'utente e rimuovi il codice monouso dal tuo database, la verifica è stata completata.