Saat melakukan verifikasi bahwa pengguna telah membeli atau mendownload salinan sah aplikasi Anda dari Google Play Store, sebaiknya jalankan pemeriksaan verifikasi lisensi di server yang Anda kontrol.
Panduan ini menunjukkan proses langkah demi langkah untuk menyelesaikan verifikasi lisensi sisi server dan beberapa praktik terbaik terkait dengan pelaksanaan pemeriksaan ini.
Ringkasan proses
Gambar 1 menunjukkan bagaimana informasi ditransfer antara aplikasi, Google Play, dan server pribadi Anda:
- Aplikasi Anda membuat permintaan kepada Google Play, yang menanyakan apakah pengguna tertentu telah membeli atau mendownload salinan sah aplikasi Anda.
- Google Play merespons dengan mengirimkan objek data respons, yaitu objek berjenis
ResponseData
, ke aplikasi Anda. Objek ini adalah bagian informasi yang ditandatangani, yang menyatakan apakah pengguna telah membeli atau mendownload salinan sah aplikasi Anda. - Aplikasi Anda membuat permintaan ke server pribadi yang Anda kontrol, yang memverifikasi konten data respons tersebut.
- Server akan merespons dengan mengirimkan status ke aplikasi Anda, yang mengindikasikan apakah pengguna memang telah membeli atau mendownload salinan sah aplikasi Anda. Jika server memberikan pesan "berhasil", verifikasi respons tersebut, lalu berikan akses kepada pengguna ke resource yang memerlukan lisensi.
Karena data respons ditandatangani oleh Google Play, lalu diperiksa di server Anda, tidak ada cara untuk mengubah objek pada perangkat yang sedang menjalankan aplikasi Anda. Jika aplikasi mengandalkan server dan menyediakan resource hanya untuk pengguna yang sah, aplikasi akan jauh lebih terlindungi dari pengguna yang tidak sah.
Bagian berikut menyediakan pertimbangan tambahan yang perlu diingat saat menjalankan verifikasi lisensi sisi-server.
Mengamankan dari serangan replay
Setelah menerima respons dari Google Play terkait status lisensi pengguna, hal ini memungkinkan pengguna untuk menyalin data respons dan menggunakannya beberapa kali, atau memberikannya kepada pengguna lain yang kemudian dapat memalsukan permintaan mereka sendiri ke server pribadi aplikasi Anda. Tindakan semacam ini dikenal sebagai serangan replay.
Untuk mengurangi kemungkinan pengguna berhasil melakukan serangan replay, lakukan langkah berikut sebelum mengirim permintaan ke server aplikasi Anda:
Periksa stempel waktu yang disertakan dalam data respons, pastikan bahwa Google Play menghasilkan respons baru-baru ini.
Lakukan pembatasan kapasitas pada permintaan server Anda, seperti backoff eksponensial, untuk mengurangi frekuensi aplikasi Anda mencoba mengirimkan data respons yang sama ke server aplikasi Anda.
Sebelum memverifikasi konten data respons Google Play di server pribadi, buatlah permintaan awal berbasis autentikasi ke server pribadi Anda. Dalam permintaan pertama ini, kirim kredensial pengguna ke server Anda, kemudian minta server Anda merespons dengan nonce, atau nomor yang hanya digunakan sekali. Kemudian, Anda dapat menyertakan nonce ini di permintaan Anda berikutnya ke server pribadi, untuk meminta data verifikasi lisensi. Untuk detail mengenai petunjuk memilih nilai yang baik untuk nonce, lihat bagian membuat nilai nonce yang sesuai.
Membuat nilai nonce yang sesuai
Gunakan salah satu dari teknik berikut untuk membuat nilai nonce yang sulit ditebak:
- Buat nilai hash berdasarkan ID pengguna.
- Buat nilai acak per pengguna. Simpan nilai acak ini di server aplikasi Anda sebagai bagian dari atribut yang diberikan pengguna.
Memverifikasi data respons dari server Anda
Saat meninjau data respons yang dikirimkan oleh server aplikasi ke aplikasi Anda, pastikan bahwa respons License Verification Library tidak dipalsukan. Verifikasi tanda tangan yang disertakan dalam data respons server aplikasi dengan membandingkannya dengan kunci yang diterima oleh aplikasi Anda dari Google Play di langkah sebelumnya.
Perlu diingat juga bahwa pemblokiran khusus untuk License Verification Library (LVL) adalah satu-satunya bagian yang perlu ditandatangani. Oleh karena itu, pemblokiran merupakan satu-satunya bagian dari data respons server aplikasi Anda yang harus dipercaya oleh aplikasi Anda.