Weryfikuj SMS-y na serwerze

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Aby umożliwić automatyczną weryfikację numerów telefonów, musisz wdrożyć w procesie weryfikacji zarówno klienta, jak i serwera. W tym dokumencie opisujemy, jak wdrożyć część serwera.

Serwer weryfikacji telefonicznej odpowiada za 3 zadania:

  1. utworzenie wiadomości weryfikacyjnej, która zawiera jednorazowy kod i ma oczekiwany format po stronie klienta dla programu do pobierania SMS-ów;
  2. Wysyłam wiadomość weryfikacyjną na urządzenie użytkownika.
  3. Weryfikowanie kodu jednorazowego po wysłaniu go z powrotem do serwera i wykonaniu wszystkich zadań po weryfikacji, których wymaga Twój backend

Sposób interakcji aplikacji z serwerem zależy tylko od Ciebie. Typowym podejściem jest udostępnianie interfejsu API REST z 2 punktami końcowymi: jeden, który otrzymuje żądania weryfikacji określonego numeru telefonu i wysyłające wiadomości SMS, oraz drugi punkt końcowy, który otrzymuje jednorazowe kody z aplikacji.

1. Tworzenie wiadomości weryfikacyjnej

Gdy serwer odbiera prośbę o weryfikację numeru telefonu, najpierw utwórz wiadomość weryfikacyjną, którą wyślesz na urządzenie użytkownika. Ta wiadomość musi:

W przeciwnym razie treść wiadomości weryfikacyjnej może być dowolna. Warto utworzyć wiadomość, z której będzie można później łatwo wyodrębnić kod jednorazowy. Prawidłowa wiadomość weryfikacyjna może na przykład wyglądać tak:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Generowanie kodu jednorazowego

Kody jednorazowe możesz zaimplementować na wiele sposobów, o ile są niezrozumiałe i możesz połączyć je z użytkownikiem lub numerem telefonu, gdy aplikacja kliencka wysyła je z powrotem do Twojego serwera. Kody powinny być łatwe do wpisania, aby uwzględnić sytuacje, w których użytkownik musi wpisać je ręcznie.

Jednym ze sposobów wdrożenia kodów jednorazowych jest wygenerowanie losowych liczb, które są używane jako klucze w tabeli bazy danych. Możesz na przykład mieć tabelę PendingWeryfikacjas, która wygląda tak:

Identyfikator Użytkownik Wygaśnięcie
123456789... 1234 14.03.2017 1:59

Identyfikatora zakodowanego w standardzie base32 możesz używać jako kodu jednorazowego.

Obliczam ciąg skrótu aplikacji

Usługi Google Play używają ciągu skrótu, aby określić, które wiadomości weryfikacyjne mają być wysyłane do aplikacji. Ciąg tekstowy składa się z nazwy pakietu aplikacji i certyfikatu klucza publicznego aplikacji. Aby wygenerować ciąg skrótu:

  1. Jeśli korzystasz z podpisywania aplikacji przez Google Play, pobierz certyfikat podpisywania aplikacji (deployment_cert.der) z sekcji Podpisywanie aplikacji w Konsoli Google Play.

    Następnie zaimportuj certyfikat podpisywania aplikacji do tymczasowego magazynu kluczy:

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

    Jeśli podpisujesz pliki APK bezpośrednio, pomiń ten krok.

  2. Uzyskaj certyfikat podpisywania aplikacji (ten, który został zaimportowany powyżej, lub ten, którego używasz do bezpośredniego podpisywania plików APK) jako ciąg szesnastkowy zapisany małymi literami.

    Aby na przykład pobrać ciąg szesnastkowy z tymczasowego magazynu kluczy utworzonego powyżej, wpisz to polecenie:

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

    Jeśli podpisujesz pliki APK bezpośrednio, określ produkcyjny magazyn kluczy i alias certyfikatu.

  3. Jeśli masz utworzony tymczasowy magazyn kluczy, usuń go.

  4. Dołącz ciąg szesnastkowy do nazwy pakietu aplikacji rozdzielonych jednym spacją.

  5. Oblicz sumę SHA-256 połączonego ciągu. Pamiętaj, aby przed obliczeniem sumy SHA-256 usunąć z ciągu znaków odstęp na początku lub na końcu.

  6. Zakoduj wartość binarną sumy SHA-256 w formacie Base64. Czasami konieczne jest odkodowanie sumy SHA-256 z formatu wyjściowego.

  7. Ciąg szyfrujący Twojej aplikacji to 11 pierwszych znaków zakodowanych w formacie base64.

To polecenie oblicza ciąg skrótu z produkcyjnego magazynu kluczy Twojej aplikacji:

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

Możesz też pobrać ciąg skrótu aplikacji z klasy AppSignatureHelper z przykładowej aplikacji do pobierania SMS-ów. Jeśli jednak używasz klasy pomocniczej, pamiętaj, aby usunąć ją z aplikacji po otrzymaniu ciągu skrótu. Nie używaj ciągu znaków ciągu tekstowego dynamicznie obliczonego w kliencie w komunikatach weryfikacyjnych.

2. Wyślij SMS-a weryfikacyjnego

Po utworzeniu wiadomości weryfikacyjnej wyślij ją na numer telefonu użytkownika za pomocą dowolnego systemu SMS.

Zobacz na przykład Weryfikacja aplikacji przy użyciu Twilio SMS w witrynie Twilio.

Gdy urządzenie otrzyma taką wiadomość, zostanie ona przekierowana do Twojej aplikacji. Aplikacja wyodrębnia jednorazowy kod i wyśle go na serwer, aby dokończyć proces weryfikacji.

3. Weryfikowanie kodu jednorazowego po jego zwróceniu

Serwer weryfikacji numeru telefonu zwykle ma drugi punkt końcowy, którego używa do odbierania jednorazowych kodów z aplikacji klienckich. Gdy serwer w tym punkcie końcowym otrzyma z aplikacji jednorazowy kod, wykonaj te czynności:

  1. Sprawdź, czy jednorazowy kod jest prawidłowy i nie stracił ważności.
  2. Zapisz, że użytkownik połączony z kodem jednorazowym przeprowadził weryfikację numeru telefonu.
  3. Usuń jednorazowy rekord bazy danych lub w inny sposób upewnij się, że tego samego kodu nie można użyć ponownie.

Gdy rejestrujesz stan weryfikacji użytkownika i usuwasz jednorazowy kod z bazy danych, weryfikacja jest zakończona.