SMS-Bestätigung auf einem Server durchführen

Damit Telefonnummern automatisch bestätigt werden, müssen Sie sowohl den Client- als auch den Serverteil des Bestätigungsvorgangs implementieren. In diesem Dokument wird die Implementierung des Serverteils beschrieben.

Der Server für die telefonische Bestätigung ist für drei Aufgaben zuständig:

  1. Eine Bestätigungsnachricht erstellen, die einen Einmalcode enthält und das Format hat, das die clientseitige SMS Retriever API erwartet
  2. Bestätigungsnachricht wird an das Gerät des Nutzers gesendet
  3. Sie überprüfen den einmaligen Code, wenn er zurück an den Server gesendet wird, und führen alle Nachprüfaufgaben aus, die für Ihr Back-End erforderlich sind.

Wie genau Ihre App mit dem Server interagiert, bleibt Ihnen überlassen. Ein gängiger Ansatz besteht darin, eine REST API mit zwei Endpunkten verfügbar zu machen: einem, der Anfragen zum Bestätigen einer bestimmten Telefonnummer empfängt und die SMS-Bestätigungsnachrichten sendet, und einem zweiten Endpunkt, der einmalige Codes von Ihrer Anwendung empfängt.

1. Bestätigungsnachricht erstellen

Wenn Ihr Server eine Anfrage zur Bestätigung einer Telefonnummer erhält, verfassen Sie zuerst die Bestätigungsnachricht, die Sie an das Gerät des Nutzers senden. Diese Meldung muss:

  • Sie dürfen nicht länger als 140 Byte sein.
  • einen einmaligen Code enthalten, den der Client an Ihren Server zurücksendet, um den Überprüfungsvorgang abzuschließen (siehe Einmalcode generieren).
  • Geben Sie einen 11-stelligen Hash-String an, der Ihre Anwendung identifiziert (siehe Hash-String der Anwendung berechnen).

Andernfalls können Sie den Inhalt der Bestätigungsnachricht beliebig wählen. Es ist hilfreich, eine Nachricht zu erstellen, aus der Sie den Einmalcode später einfach extrahieren können. Eine gültige Bestätigungsnachricht könnte beispielsweise so aussehen:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Einmaligen Code generieren

Sie können Einmalcodes auf verschiedene Weise implementieren, solange die Codes nicht erraten werden können und Sie die Codes mit einem Nutzer oder einer Telefonnummer verknüpfen können, wenn die Clientanwendung sie zurück an Ihren Server sendet. Achten Sie darauf, dass sich die Codes leicht eingeben lassen, damit Nutzer sie in Situationen einsetzen können, in denen sie den Code manuell eingeben müssen.

Eine Möglichkeit, Einmalcodes zu implementieren, besteht darin, Zufallszahlen zu generieren, die Sie als Schlüssel in einer Datenbanktabelle verwenden. Sie haben beispielsweise eine Tabelle mit ausstehenden Bestätigungen wie diese:

ID Nutzer Ablauffrist
123456789... 1234 14.3.2017 1:59

Sie können die base32-codierte ID als einmaligen Code verwenden.

Hash-String der Anwendung berechnen

Die Google Play-Dienste verwenden den Hash-String, um zu bestimmen, welche Bestätigungsnachrichten an Ihre App gesendet werden. Der Hash-String besteht aus dem Paketnamen Ihrer App und dem Public-Key-Zertifikat Ihrer App. So generieren Sie den Hash-String:

  1. Wenn Sie die App-Signatur von Google Play verwenden, laden Sie Ihr App-Signaturzertifikat (deployment_cert.der) aus dem Bereich App-Signatur der Google Play Console herunter.

    Importieren Sie dann das App-Signaturzertifikat in einen temporären Schlüsselspeicher:

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

    Wenn Sie Ihre APKs direkt signieren, überspringen Sie diesen Schritt.

  2. Holen Sie sich Ihr App-Signaturzertifikat – entweder das zuvor importierte oder das Zertifikat, mit dem Sie Ihre APKs direkt signieren – als Hexadezimalstring in Kleinbuchstaben.

    Geben Sie beispielsweise den folgenden Befehl ein, um den Hex-String aus dem oben erstellten temporären Schlüsselspeicher abzurufen:

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

    Wenn Sie Ihre APKs direkt signieren, geben Sie Ihren Produktionsschlüsselspeicher und den Zertifikatalias an.

  3. Wenn Sie einen temporären Schlüsselspeicher erstellt haben, löschen Sie ihn.

  4. Hängen Sie den Hex-String an den Paketnamen Ihrer App an, getrennt durch ein einzelnes Leerzeichen.

  5. Berechnet die SHA-256-Summe des kombinierten Strings. Entfernen Sie alle voran- oder nachgestellten Leerzeichen aus dem String, bevor Sie die SHA-256-Summe berechnen.

  6. Codieren Sie den Binärwert der SHA-256-Summe mit Base64. Möglicherweise müssen Sie die SHA-256-Summe zuerst aus ihrem Ausgabeformat decodieren.

  7. Der Hash-String Ihrer Anwendung besteht aus den ersten 11 Zeichen des base64-codierten Hashs.

Der folgende Befehl berechnet den Hash-String aus dem Schlüsselspeicher der Anwendung:

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

Alternativ können Sie den Hash-String Ihrer Anwendung mit der Klasse AppSignatureHelper aus der Beispiel-App für den SMS-Abruf abrufen. Wenn Sie jedoch die Hilfsklasse verwenden, müssen Sie sie nach dem Abrufen des Hash-Strings aus der Anwendung entfernen. Verwenden Sie in Ihren Bestätigungsnachrichten keine Hash-Strings, die dynamisch auf dem Client berechnet werden.

2. Bestätigungsnachricht per SMS senden

Nachdem Sie die Bestätigungsnachricht erstellt haben, senden Sie die Nachricht über ein beliebiges SMS-System an die Telefonnummer des Nutzers.

Ein Beispiel dafür finden Sie auf der Entwicklerwebsite von Twilio unter Anwendungsbestätigung mit Twilio SMS.

Wenn das Gerät des Nutzers diese Nachricht empfängt, wird die Nachricht an Ihre Anwendung weitergeleitet. Ihre App extrahiert den Einmalcode und sendet ihn zurück an Ihren Server, um den Bestätigungsprozess abzuschließen.

3. Einmalcode bestätigen, wenn er zurückgegeben wird

Ein Server für die Überprüfung von Telefonnummern hat in der Regel einen zweiten Endpunkt, über den er einmalige Codes von Clientanwendungen empfängt. Wenn Ihr Server an diesem Endpunkt einen einmaligen Code von Ihrer Anwendung erhält, gehen Sie so vor:

  1. Vergewissern Sie sich, dass der Einmalcode gültig und nicht abgelaufen ist.
  2. Notieren Sie sich, dass der mit dem einmaligen Code verknüpfte Nutzer die Bestätigung der Telefonnummer abgeschlossen hat.
  3. Entfernen Sie den Datenbankeintrag des einmaligen Codes oder sorgen Sie auf andere Weise dafür, dass derselbe Code nicht noch einmal verwendet werden kann.

Wenn Sie den Bestätigungsstatus des Nutzers erfassen und Einmalcode aus der Datenbank entfernen, ist die Überprüfung abgeschlossen.