Bir Sunucuda SMS Doğrulaması Gerçekleştir

Telefon numaralarını otomatik olarak doğrulamak için doğrulama akışının hem istemci hem de sunucu bölümlerini uygulamanız gerekir. Bu dokümanda, sunucu bölümünün nasıl uygulanacağı açıklanmaktadır.

Telefon doğrulama sunucusu üç görevden sorumludur:

  1. Tek seferlik kod içeren ve istemci tarafı SMS Retriever API'nin beklediği biçime sahip bir doğrulama mesajı oluşturma.
  2. Doğrulama mesajı kullanıcının cihazına gönderiliyor
  3. Tek seferlik kodu sunucuya geri gönderildiğinde doğrulamak ve arka ucunuzun gerektirdiği tüm doğrulama sonrası görevleri tamamlamak

Uygulamanızın sunucuyla nasıl etkileşimde bulunduğuna dair ayrıntılar size bağlıdır. Yaygın yaklaşımlardan biri, iki uç noktası olan bir REST API'yi kullanıma sunmaktır. Uç noktalardan biri, belirli bir telefon numarasını doğrulama istekleri ile SMS doğrulama mesajlarını gönderir, diğeri ise uygulamanızdan tek seferlik kodlar alır.

1. Doğrulama mesajı oluşturma

Sunucunuz bir telefon numarasını doğrulama isteği aldığında, önce kullanıcının cihazına göndereceğiniz doğrulama mesajını oluşturun. Bu mesajda:

Aksi takdirde, doğrulama mesajının içeriği sizin seçtiğiniz bir içerik olabilir. Daha sonra tek seferlik kodu kolayca çıkarabileceğiniz bir mesaj oluşturmak faydalı olacaktır. Örneğin, geçerli bir doğrulama mesajı aşağıdaki gibi görünebilir:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Tek kullanımlık kod oluşturma

Tek kullanımlık kodları, kodlar tahmin edilebildiği sürece pek çok şekilde uygulayabilirsiniz ve istemci uygulaması bunları sunucunuza geri gönderdiğinde kodları bir kullanıcı veya telefon numarasına bağlayabilirsiniz. Kullanıcıların kodu manuel olarak yazmasını gerektirebilecek durumlara uygun şekilde kodların kolayca yazılmasını sağlamalısınız.

Tek seferlik kodları uygulamanın bir yolu, veritabanı tablosunda anahtar olarak kullandığınız rastgele sayılar oluşturmaktır. Örneğin, aşağıdaki gibi bir PendingDoğrulama tablonuz olabilir:

Kimlik Kullanıcı Son Geçerlilik Tarihi
123456789... 1234 14.03.2017 1:59

Base32 olarak kodlanmış kimliği tek seferlik kod olarak kullanabilirsiniz.

Uygulamanızın karma dizesi hesaplanıyor

Google Play Hizmetleri, uygulamanıza hangi doğrulama mesajlarının gönderileceğini belirlemek için karma dizesini kullanır. Karma dizesi, uygulamanızın paket adı ve uygulamanızın ortak anahtar sertifikasından oluşur. Karma dizesini oluşturmak için:

  1. Google Play'den uygulama imzalama özelliğini kullanıyorsanız Google Play Console'daki Uygulama imzalama bölümünden uygulama imzalama sertifikanızı (deployment_cert.der) indirin.

    Ardından uygulama imzalama sertifikasını geçici bir anahtar deposuna aktarın:

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

    APK'larınızı doğrudan imzalıyorsanız bu adımı atlayın.

  2. Yukarıda içe aktardığınız veya APK'larınızı doğrudan imzalamak için kullandığınız uygulama imzalama sertifikanızı küçük harfli onaltılık dize olarak alın.

    Örneğin, yukarıda oluşturulan geçici anahtar deposundan onaltılık dizeyi almak için aşağıdaki komutu yazın:

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

    APK'larınızı doğrudan imzalarsanız üretim anahtar deponuzu ve sertifika takma adınızı belirtin.

  3. Geçici anahtar deposu oluşturduysanız bunu silin.

  4. Onaltılık dizeyi uygulamanızın paket adına tek bir boşlukla ayırarak ekleyin.

  5. Birleştirilmiş dizenin SHA-256 toplamını hesaplayın. SHA-256 toplamını hesaplamadan önce dizenin başındaki veya sonundaki boşlukları kaldırdığınızdan emin olun.

  6. SHA-256 toplamının ikili değerini Base64 olarak kodlayın. Öncelikle SHA-256 toplamının kodunu çıkış biçiminden çözmeniz gerekebilir.

  7. Uygulamanızın karma dizesi, base64 kodlamalı karmanın ilk 11 karakteridir.

Aşağıdaki komut, uygulamanızın üretim anahtar deposundaki karma dizesini hesaplar:

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

Alternatif olarak, uygulamanızın karma dizesini SMS retriever örnek uygulamasındaki AppSignatureHelper sınıfıyla alabilirsiniz. Ancak, yardımcı sınıfı kullanıyorsanız karma dizesini aldıktan sonra bunu uygulamanızdan kaldırdığınızdan emin olun. Doğrulama mesajlarınızda, istemci üzerinde dinamik olarak hesaplanan karma dizeleri kullanmayın.

2. Doğrulama mesajını SMS ile gönder

Doğrulama mesajını oluşturduktan sonra herhangi bir SMS sistemini kullanarak kullanıcının telefon numarasına mesajı gönderin.

Örneğin, Twilio'nun geliştirici sitesindeki Twlio SMS kullanarak uygulama doğrulama bölümüne bakın.

Kullanıcının cihazı bu mesajı aldığında mesaj uygulamanıza yönlendirilir. Uygulamanız tek seferlik kodu çıkartır ve doğrulama işlemini tamamlamak için tekrar sunucunuza gönderir.

3. Döndürüldüğünde tek kullanımlık kodu doğrulayın

Telefon numarası doğrulama sunucusunun genellikle istemci uygulamalarından tek seferlik kodları geri almak için kullandığı ikinci bir uç nokta vardır. Sunucunuz bu uç noktada uygulamanızdan tek seferlik kod aldığında aşağıdakileri yapın:

  1. Tek kullanımlık kodun geçerli olduğunu ve süresinin dolmadığını doğrulayın.
  2. Tek seferlik koda bağlanan kullanıcının telefon numarası doğrulamasını tamamladığını kaydedin.
  3. Tek kullanımlık kodun veritabanı kaydını kaldırın veya bir şekilde, aynı kodun tekrar kullanılmamasını sağlayın.

Kullanıcının doğrulama durumunu kaydedip veritabanınızdan tek seferlik kodu kaldırdığınızda doğrulama işlemi tamamlanır.