إضافة التحقّق من الترخيص من جهة الخادم إلى تطبيقك

عند التأكّد من أنّ المستخدم قد اشترى أو نزّل نسخة صالحة من تطبيقك من "متجر Google Play"، من الأفضل إجراء فحص التحقّق من الترخيص على خادم تتحكَّم فيه.

يقدم هذا الدليل عملية خطوة بخطوة لإكمال التحقق من الترخيص من جهة الخادم ويقدم بعض أفضل الممارسات المتعلقة بإجراء هذا الفحص.

نظرة عامة على العملية

يوضّح الشكل 1 كيفية نقل المعلومات بين تطبيقك وGoogle Play والخادم الخاص:

مخطط تدفق البيانات
الشكل 1. تدفق البيانات بين تطبيقك وGoogle Play، ثم بين تطبيقك والخادم الخاص
  1. يرسل تطبيقك طلبًا إلى Google Play للاستعلام عما إذا كان مستخدم معيّن قد اشترى أو نزّل نسخة صالحة من تطبيقك.
  2. ويردّ Google Play على التطبيق من خلال إرسال كائن بيانات الاستجابة، وهو كائن من النوع ResponseData، إلى تطبيقك. وهذا الكائن عبارة عن معلومة موقعة توضّح ما إذا كان المستخدم قد اشترى أو نزّل نسخةً مشروعة من تطبيقك.
  3. يرسل تطبيقك طلبًا إلى خادم خاص يمكنك التحكّم فيه، ويتحقّق من محتوى بيانات الاستجابة.
  4. يستجيب الخادم بإرسال حالة إلى تطبيقك للإشارة إلى ما إذا كان المستخدم قد اشترى أو نزّل نسخة صالحة من تطبيقك. وإذا كان الخادم يقدم رسالة "تم بنجاح"، يجب التحقق من الرد، ثم منح المستخدم إمكانية الوصول إلى الموارد التي تتطلب ترخيصًا.

بما أنّ بيانات الاستجابة يتم توقيعها من خلال Google Play ثم التحقّق منها في الخادم الخاص بك، لا تتوفّر طريقة لتعديل العنصر في الجهاز الذي يشغّل تطبيقك. فإذا كان تطبيقك يعتمد على الخادم ولا يوفّر الموارد إلا للمستخدمين الشرعيين، تتم زيادة حماية تطبيقك من المستخدمين غير المصرّح لهم.

تقدم الأقسام التالية اعتبارات إضافية يجب وضعها في الاعتبار عند إجراء التحقق من الترخيص من جهة الخادم.

الحماية من هجمات إعادة اللعب

وبعد تلقّي رد من Google Play بشأن حالة ترخيص المستخدم، من الممكن أن ينسخ بيانات الاستجابة ويستخدمها عدة مرات، أو يمنحها للمستخدمين الآخرين الذين يمكنهم حينئذٍ تزييف طلباتهم الخاصة إلى الخادم الخاص لتطبيقك. ويُعرف هذا النوع من الإجراءات باسم هجوم إعادة التشغيل.

للحد من احتمالية تنفيذ المستخدمين لهجمات إعادة تشغيل بنجاح، اتّخِذ الإجراءات التالية قبل إرسال طلب إلى خادم تطبيقك:

  • تحقَّق من الطابع الزمني الذي يظهر في بيانات الردّ للتأكّد من أنّ Google Play هو من أنشأ الردّ مؤخرًا.

  • يمكنك تحديد معدّل الوصول إلى طلب الخادم، مثل التراجع الأسي، لتقليل عدد المرات التي يحاول فيها تطبيقك إرسال بيانات الاستجابة نفسها إلى خادم التطبيق.

  • قبل التحقق من محتوى بيانات استجابة Google Play على خادمك الخاص، عليك إرسال طلب مبدئي يستند إلى المصادقة إلى خادمك الخاص. في هذا الطلب الأول، أرسِل بيانات اعتماد المستخدم إلى خادمك واطلب من الخادم بعد ذلك الاستجابة برقم غير مميّز أو برقم يُستخدم مرة واحدة فقط. يمكنك بعد ذلك تضمين هذا الرقم في طلبك التالي إلى خادمك الخاص، وطلب بيانات التحقق من الترخيص. للاطّلاع على تفاصيل حول كيفية اختيار قيمة جيدة للرقم، يُرجى مراجعة القسم إنشاء قيمة خاصة مناسبة.

إنشاء قيمة nonce مناسبة

استخدِم أحد الأساليب التالية لإنشاء قيمة خاصة يصعب تخمينها:

  • إنشاء قيمة تجزئة استنادًا إلى رقم تعريف المستخدم
  • يمكنك إنشاء قيمة عشوائية على أساس كل مستخدم. قم بتخزين هذه القيمة العشوائية على خادم تطبيقك كجزء من سمات مستخدم معين.

التحقُّق من بيانات الاستجابة من الخادم

عند مراجعة بيانات الاستجابة التي يرسلها خادم التطبيق إلى تطبيقك، تأكَّد من أنّ استجابة "مكتبة التحقق من الترخيص" ليست مزيفة. تحقَّق من التوقيع المضمّن في بيانات استجابة خادم التطبيق من خلال مقارنته بالمفتاح الذي تلقّاه تطبيقك من Google Play في خطوة سابقة.

تجدر الإشارة أيضًا إلى أنّ الحظر الخاص بمكتبة التحقّق من الترخيص (LVL) هو الجزء الوحيد الذي يتم توقيعه. ولذلك، فإنه الجزء الوحيد من بيانات استجابة خادم التطبيق الذي يجب أن يثق به تطبيقك.