הוספת אימות רישיון בצד השרת לאפליקציה

כשאתם בודקים שהמשתמש רכש או הוריד עותק חוקי של האפליקציה מחנות Google Play, מומלץ לבצע את בדיקת אימות הרישיון בשרת שבשליטתכם.

במדריך הזה מוסבר בהרחבה איך לבצע אימות רישיון בצד השרת, ומפורטות כמה שיטות מומלצות לביצוע הבדיקה הזו.

סקירה כללית של התהליך

באיור 1 מוצגת אופן העברת המידע בין האפליקציה, Google Play והשרת הפרטי:

תרשים של זרימת נתונים
איור 1. זרימת הנתונים בין האפליקציה ל-Google Play, ואז בין האפליקציה לשרתי הפרטיים שלכם
  1. האפליקציה שולחת בקשה ל-Google Play כדי לבדוק אם משתמש מסוים קנה או הוריד עותק חוקי של האפליקציה.
  2. בתגובה, Google Play שולחת לאפליקציה אובייקט של נתוני תגובה, אובייקט מסוג ResponseData. האובייקט הזה הוא פיסת מידע חתומה שמציינת אם המשתמש קנה או הוריד עותק חוקי של האפליקציה.
  3. האפליקציה שולחת בקשה לשרת פרטי שבשליטתכם, ומאמתת את תוכן נתוני התגובה.
  4. השרת מגיב על ידי שליחת סטטוס לאפליקציה, שמציין אם המשתמש אכן רכש או הוריד עותק חוקי של האפליקציה. אם השרת שולח את ההודעה 'success', מאמתים את התגובה ואז מעניקים למשתמש גישה למשאבים שדורשים רישיון.

מכיוון שנתוני התגובה נחתמים על ידי Google Play ולאחר מכן נבדקים בשרת, אין דרך לשנות את האובייקט במכשיר שבו פועלת האפליקציה. אם האפליקציה מסתמכת על השרת ומאפשרת למשאבים להיות זמינים רק למשתמשים מורשים, האפליקציה מוגנת בצורה משמעותית יותר מפני משתמשים לא מורשים.

בסעיפים הבאים מפורטות נקודות נוספות שכדאי לזכור כשמבצעים אימות רישיון בצד השרת.

הגנה מפני התקפות שחזור

אחרי קבלת תשובה מ-Google Play לגבי סטטוס הרישיון של המשתמש, המשתמש יכול להעתיק את נתוני התשובה ולהשתמש בהם כמה פעמים, או לתת אותם למשתמשים אחרים שיכולים לזייף בקשות משלהם לשרת הפרטי של האפליקציה. פעולה כזו נקראת מתקפת שליחה מחדש.

כדי לצמצם את הסיכוי שמשתמשים יצליחו לבצע התקפות שחזור, כדאי לבצע את הפעולות הבאות לפני שליחת בקשה לשרת של האפליקציה:

  • בודקים את חותמת הזמן שכלולה בנתוני התגובה, ומוודאים ש-Google Play יצרה את התגובה לאחרונה.

  • כדאי להגביל את הקצב של בקשות השרת, למשל באמצעות השהיה מעריכית, כדי לצמצם את מספר הפעמים שהאפליקציה תנסה לשלוח את אותם נתוני תגובה לשרת של האפליקציה.

  • לפני שתאמתו את תוכן נתוני התגובה של Google Play בשרת הפרטי, עליכם לשלוח בקשה ראשונית מבוססת-אימות לשרת הפרטי. בבקשה הראשונה, שולחים את פרטי הכניסה של המשתמש לשרת, והשרת משיב בnonce, או מספר שמשמש רק פעם אחת. לאחר מכן תוכלו לכלול את המזהה החד-פעמי הזה בבקשה הבאה לשרת הפרטי, שבה תבקשו לקבל את נתוני האימות של הרישיון. פרטים על בחירת ערך טוב למזהה החד-פעמי מופיעים בקטע יצירת ערך nonce מתאים.

יצירת ערך nonce מתאים

אפשר להשתמש באחת מהשיטות הבאות כדי ליצור ערך nonce שקשה לנחש:

  • יצירת ערך גיבוב על סמך המזהה של המשתמש.
  • יצירת ערך אקראי לכל משתמש. שומרים את הערך האקראי הזה בשרת של האפליקציה כחלק מהמאפיינים של משתמש נתון.

אימות נתוני התגובה מהשרת

כשבודקים את נתוני התשובה שהשרת של האפליקציה שולח לאפליקציה, חשוב לוודא שהתגובה של ספריית אימות הרישיון לא מזויפת. מאמתים את החתימה שכלולה בנתוני התגובה של שרת האפליקציה על ידי השוואה למפתח שהאפליקציה קיבלה מ-Google Play בשלב קודם.

חשוב גם לזכור שהבלוק הספציפי ל-License Verification Library‏ (LVL) הוא החלק היחיד שנחתם. לכן, זהו החלק היחיד בנתוני התגובה של שרת האפליקציה שאפליקצייתכם צריכה לסמוך עליו.