Kullanıcının uygulamanızın yasal bir kopyasını Google Play Store'dan satın aldığını veya indirdiğini doğrularken lisans doğrulama kontrolünü sizin kontrol ettiğiniz bir sunucuda gerçekleştirmek en iyisidir.
Bu kılavuzda, sunucu tarafı lisans doğrulamasını tamamlamayla ilgili adım adım talimatlar ve bu kontrolün yapılmasıyla ilgili bazı en iyi uygulamalar sunulmaktadır.
Sürece genel bakış
Şekil 1'de, bilgilerin uygulamanız, Google Play ve özel sunucunuz arasında nasıl aktarıldığı gösterilmektedir:
- Uygulamanız, belirli bir kullanıcının uygulamanızın yasal bir kopyasını satın alıp almadığını veya indirip indirmediğini öğrenmek için Google Play'e istekte bulunur.
- Google Play, uygulamanıza
ResponseData
türünde bir nesne olan yanıt veri nesnesi göndererek yanıt verir. Bu nesne, kullanıcının uygulamanızın yasal bir kopyasını satın alıp almadığını veya indirip indirmediğini belirten imzalı bir bilgidir. - Uygulamanız, kontrol ettiğiniz bir özel sunucuya istekte bulunarak yanıt verilerinin içeriğini doğrular.
- Sunucu, uygulamanıza bir durum göndererek yanıt verir ve kullanıcının, uygulamanızın yasal bir kopyasını gerçekten satın alıp almadığını veya indirip indirmediğini gösterir. Sunucu "başarılı" mesajı sağlarsa yanıtı doğrulayın ve ardından kullanıcıya lisans gerektiren kaynaklara erişim izni verin.
Yanıt verileri Google Play tarafından imzalanıp sunucunuzda kontrol edildiğinden, uygulamanızı çalıştıran cihazdaki nesneyi değiştirmenin yolu yoktur. Uygulamanız sunucuya bağımlıysa ve kaynakları yalnızca meşru kullanıcıların kullanımına sunuyorsa uygulamanız yetkisiz kullanıcılara karşı önemli ölçüde daha korunur.
Aşağıdaki bölümlerde, sunucu tarafı lisans doğrulaması gerçekleştirirken göz önünde bulundurulması gereken ek noktalar açıklanmıştır.
Tekrarlama saldırılarına karşı koruma sağlayın
Google Play'den kullanıcının lisans durumuyla ilgili bir yanıt aldıktan sonra, kullanıcı yanıt verilerini kopyalayıp birden çok kez kullanabilir veya uygulamanızın özel sunucusuna kendi isteklerini oluşturabilecek diğer kullanıcılara verebilir. Bu tür eylemler tekrar saldırısı olarak bilinir.
Kullanıcıların tekrar oynatma saldırılarını gerçekleştirme olasılığını azaltmak için uygulamanızın sunucusuna istek göndermeden önce aşağıdaki önlemleri alın:
Google Play'in yanıtı kısa süre önce oluşturduğundan emin olarak yanıt verilerindeki zaman damgasını kontrol edin.
Uygulamanızın, aynı yanıt verilerini uygulamanızın sunucusuna gönderme deneme sayısını azaltmak için sunucu isteğinizde üstel geri çekilme gibi hız sınırlandırması uygulayın.
Google Play'in özel sunucunuzdaki yanıt verilerinin içeriğini doğrulamadan önce, özel sunucunuza kimlik doğrulama tabanlı ilk bir istek gönderin. Bu ilk istekte kullanıcı kimlik bilgilerini sunucunuza gönderin ve ardından sunucunuzun bir tek seferlik veya yalnızca bir kez kullanılan bir sayı ile yanıt vermesini sağlayın. Ardından bu tek seferlik rastgele sayıyı özel sunucunuza yapılacak bir sonraki isteğinize ekleyerek lisans doğrulama verilerini isteyebilirsiniz. Tek seferlik rastgele bir değer seçmeyle ilgili ayrıntılar için uygun bir tek seferlik rastgele değer oluşturma bölümüne bakın.
Uygun bir tek seferlik rastgele değeri oluştur
Tahmin edilmesi zor bir tek seferlik rastgele değeri oluşturmak için aşağıdaki tekniklerden birini kullanın:
- Kullanıcı kimliğine göre bir karma değeri oluşturun.
- Kullanıcı bazında rastgele bir değer oluşturun. Bu rastgele değeri, uygulamanızın sunucusunda belirli bir kullanıcı özelliklerinin parçası olarak depolayın.
Sunucunuzdan alınan yanıt verilerini doğrulayın
Uygulama sunucusunun uygulamanıza gönderdiği yanıt verilerini incelerken, Lisans Doğrulama Kitaplığı yanıtının sahte olmadığından emin olun. Uygulama sunucusunun yanıt verilerindeki imzayı, uygulamanızın önceki adımda Google Play'den aldığı anahtarla karşılaştırarak doğrulayın.
Ayrıca, Lisans Doğrulama Kitaplığı'na (LVL) özel blokun, imzalı tek bölüm olduğunu da unutmamak gerekir. Bu nedenle, uygulama sunucunuzun yanıt verilerinde uygulamanızın güvenmesi gereken tek parça budur.