هنگام تأیید اینکه کاربر یک نسخه قانونی از برنامه شما را از فروشگاه Google Play خریداری یا دانلود کرده است، بهتر است بررسی تأیید مجوز را روی سروری که شما کنترل میکنید انجام دهید.
این راهنما یک فرآیند گام به گام را برای تکمیل تأیید مجوز سمت سرور ارائه می دهد و برخی از بهترین شیوه های مربوط به انجام این بررسی را ارائه می دهد.
نمای کلی فرآیند
شکل 1 نحوه انتقال اطلاعات بین برنامه، Google Play و سرور خصوصی شما را نشان می دهد:
- برنامه شما درخواستی از Google Play میکند و میپرسد آیا یک کاربر خاص یک نسخه قانونی از برنامه شما را خریداری یا دانلود کرده است یا خیر.
- Google Play با ارسال یک شی داده پاسخ ، یک شی از نوع
ResponseData
، به برنامه شما پاسخ می دهد. این شیء یک قطعه اطلاعات امضا شده است که بیان می کند آیا کاربر یک نسخه قانونی از برنامه شما را خریداری کرده یا دانلود کرده است. - برنامه شما درخواستی را به سرور خصوصی که شما کنترل میکنید ارسال میکند و محتوای دادههای پاسخ را تأیید میکند.
- سرور با ارسال یک وضعیت به برنامه شما پاسخ می دهد، که نشان می دهد آیا کاربر واقعاً یک نسخه قانونی از برنامه شما را خریداری کرده یا دانلود کرده است. اگر سرور یک پیام "موفقیت" ارائه می دهد، پاسخ را تأیید کنید و سپس به کاربر اجازه دسترسی به منابعی را بدهید که نیاز به مجوز دارند.
از آنجا که دادههای پاسخ توسط Google Play امضا میشوند، سپس در سرور شما بررسی میشوند، هیچ راهی برای تغییر شی در دستگاهی که برنامه شما را اجرا میکند وجود ندارد. اگر برنامه شما به سرور متکی است و منابع را فقط در اختیار کاربران قانونی قرار می دهد، برنامه شما به طور قابل ملاحظه ای در برابر کاربران غیرمجاز محافظت می شود.
بخشهای زیر ملاحظات دیگری را ارائه میکنند که باید هنگام انجام تأیید مجوز سمت سرور در نظر داشته باشید.
محافظت در برابر حملات تکراری
پس از دریافت پاسخ از Google Play در مورد وضعیت مجوز کاربر، این امکان برای کاربر وجود دارد که دادههای پاسخ را کپی کرده و چندین بار از آن استفاده کند، یا آن را به سایر کاربران بدهد تا بتوانند درخواستهای خود را به سرور خصوصی برنامه شما جعل کنند. این نوع عمل به عنوان یک حمله تکراری شناخته می شود.
برای کاهش احتمال انجام موفقیت آمیز حملات تکراری توسط کاربران، اقدامات زیر را قبل از ارسال درخواست به سرور برنامه خود انجام دهید:
مهر زمانی موجود در دادههای پاسخ را بررسی کنید و مطمئن شوید که Google Play اخیراً پاسخ را ایجاد کرده است.
برای کاهش تعداد دفعاتی که برنامه شما سعی میکند همان دادههای پاسخ را به سرور برنامه شما ارسال کند، در درخواست سرور خود محدودیت نرخ را انجام دهید، مانند بازگشت نمایی.
قبل از تأیید محتویات دادههای پاسخ Google Play در سرور خصوصی خود، یک درخواست اولیه و مبتنی بر احراز هویت از سرور خصوصی خود ارائه دهید. در این درخواست اول، اعتبار کاربری را به سرور خود ارسال کنید و سرور خود را با یک nonce یا عددی که فقط یک بار استفاده می شود پاسخ دهد. سپس می توانید این nonce را در درخواست بعدی خود به سرور خصوصی خود بگنجانید و اطلاعات تأیید مجوز را بخواهید. برای جزئیات در مورد نحوه انتخاب یک مقدار خوب برای nonce، بخش ایجاد یک مقدار nonce مناسب را ببینید.
یک مقدار nonce مناسب ایجاد کنید
برای ایجاد یک مقدار nonce که حدس زدن آن دشوار است از یکی از تکنیک های زیر استفاده کنید:
- یک مقدار هش بر اساس شناسه کاربر ایجاد کنید.
- یک مقدار تصادفی بر اساس هر کاربر ایجاد کنید. این مقدار تصادفی را در سرور برنامه خود به عنوان بخشی از ویژگی های یک کاربر خاص ذخیره کنید.
داده های پاسخ را از سرور خود تأیید کنید
هنگام بررسی داده های پاسخی که سرور برنامه شما به برنامه شما ارسال می کند، مطمئن شوید که پاسخ کتابخانه تأیید مجوز جعلی نباشد. امضای موجود در دادههای پاسخ سرور برنامه را با مقایسه آن با کلیدی که برنامه شما در مرحله قبل از Google Play دریافت کرده بود، تأیید کنید.
همچنین لازم به یادآوری است که بلوک مخصوص کتابخانه تأیید مجوز (LVL) تنها بخشی است که امضا شده است. بنابراین، این تنها بخشی از داده های پاسخ سرور برنامه شما است که برنامه شما باید به آن اعتماد کند.