การเพิ่มการยืนยันใบอนุญาตฝั่งเซิร์ฟเวอร์ลงในแอป

เมื่อต้องการตรวจสอบว่าผู้ใช้ซื้อหรือดาวน์โหลดแอปของคุณจาก Google Play Store โดยใช้สำเนาที่ถูกต้องแล้ว วิธีที่ดีที่สุดคือการตรวจสอบการยืนยันใบอนุญาตบนเซิร์ฟเวอร์ที่คุณควบคุม

คู่มือนี้จะแสดงขั้นตอนแบบทีละขั้นตอนสำหรับการยืนยันใบอนุญาตฝั่งเซิร์ฟเวอร์ให้เสร็จสมบูรณ์ และแสดงแนวทางปฏิบัติแนะนำบางส่วนเกี่ยวกับการดำเนินการตรวจสอบนี้

ภาพรวมของกระบวนการ

รูปที่ 1 แสดงวิธีโอนข้อมูลระหว่างแอปของคุณ, Google Play และเซิร์ฟเวอร์ส่วนตัว

แผนภาพการไหลของข้อมูล
รูปที่ 1 การรับส่งข้อมูลระหว่างแอปของคุณกับ Google Play แล้วจากนั้นจะเป็นการรับส่งข้อมูลระหว่างแอปกับเซิร์ฟเวอร์ส่วนตัวของคุณ
  1. แอปของคุณส่งคำขอไปยัง Google Play เพื่อสอบถามว่าผู้ใช้รายหนึ่งๆ ได้ซื้อหรือดาวน์โหลดสำเนาที่ถูกต้องของแอปหรือไม่
  2. Google Play จะตอบกลับโดยการส่งออบเจ็กต์ข้อมูลการตอบกลับ ซึ่งเป็นออบเจ็กต์ประเภท ResponseData ไปยังแอปของคุณ ออบเจ็กต์นี้เป็นข้อมูลที่มีการเซ็นชื่อซึ่งระบุว่าผู้ใช้ซื้อหรือดาวน์โหลดสำเนาที่ถูกต้องของแอปหรือไม่
  3. แอปของคุณส่งคำขอไปยังเซิร์ฟเวอร์ส่วนตัวที่คุณควบคุม ซึ่งจะยืนยันเนื้อหาของข้อมูลการตอบกลับ
  4. เซิร์ฟเวอร์จะตอบกลับโดยการส่งสถานะไปยังแอป ซึ่งระบุว่าผู้ใช้ได้ซื้อหรือดาวน์โหลดสำเนาที่ถูกต้องของแอปคุณจริงๆ หรือไม่ หากเซิร์ฟเวอร์แสดงข้อความ "สำเร็จ" ให้ยืนยันการตอบกลับ แล้วให้สิทธิ์ผู้ใช้เข้าถึงแหล่งข้อมูลที่ต้องใช้ใบอนุญาต

เนื่องจาก Google Play เป็นผู้ลงนามในข้อมูลการตอบกลับและตรวจสอบในเซิร์ฟเวอร์ของคุณ จึงไม่มีวิธีแก้ไขออบเจ็กต์ในอุปกรณ์ที่ใช้แอปของคุณ หากแอปของคุณใช้เซิร์ฟเวอร์และทำให้ทรัพยากรพร้อมใช้งานสำหรับผู้ใช้ที่ถูกต้องเท่านั้น แอปจะได้รับการปกป้องจากผู้ใช้ที่ไม่ได้รับอนุญาตมากขึ้น

ส่วนต่อไปนี้แสดงข้อควรพิจารณาเพิ่มเติมที่ควรคำนึงถึงเมื่อทำการยืนยันใบอนุญาตฝั่งเซิร์ฟเวอร์

ป้องกันไม่ให้มีการโจมตีด้วยการบันทึกและเล่นซ้ำ

หลังจากได้รับการตอบกลับจาก Google Play เกี่ยวกับสถานะใบอนุญาตของผู้ใช้แล้ว ผู้ใช้อาจคัดลอกข้อมูลการตอบกลับดังกล่าวและใช้ซ้ำหลายครั้ง หรือมอบข้อมูลดังกล่าวให้ผู้ใช้รายอื่นซึ่งอาจปลอมคำขอของตนเองไปยังเซิร์ฟเวอร์ส่วนตัวของแอปคุณ การดำเนินการประเภทนี้เรียกว่าการโจมตีแบบส่งซ้ำ

โปรดใช้มาตรการต่อไปนี้ก่อนส่งคำขอไปยังเซิร์ฟเวอร์ของแอปเพื่อลดโอกาสที่ผู้ใช้จะทำการโจมตีด้วยการเล่นซ้ำได้

  • ตรวจสอบการประทับเวลาที่รวมอยู่ในข้อมูลการตอบกลับเพื่อให้แน่ใจว่า Google Play เพิ่งสร้างคำตอบ

  • จำกัดอัตราการส่งคำขอไปยังเซิร์ฟเวอร์ เช่น การลดจำนวนครั้งแบบทวีคูณ เพื่อลดจำนวนครั้งที่แอปพยายามส่งข้อมูลการตอบกลับเดียวกันไปยังเซิร์ฟเวอร์ของแอป

  • ก่อนยืนยันเนื้อหาของข้อมูลการตอบกลับของ Google Play ในเซิร์ฟเวอร์ส่วนตัว ให้ส่งคำขอครั้งแรกตามการตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ส่วนตัว ในคำขอแรกนี้ ให้ส่งข้อมูลเข้าสู่ระบบของผู้ใช้ไปยังเซิร์ฟเวอร์ แล้วให้เซิร์ฟเวอร์ตอบกลับด้วย Nonce หรือตัวเลขที่ใช้เพียงครั้งเดียว จากนั้นคุณสามารถใส่ค่าที่ไม่ซ้ำกันนี้ในคำขอครั้งถัดไปไปยังเซิร์ฟเวอร์ส่วนตัวเพื่อขอข้อมูลการยืนยันใบอนุญาต ดูรายละเอียดเกี่ยวกับวิธีเลือกค่าที่ดีสําหรับ Nonce ได้ที่ส่วนสร้างค่า Nonce ที่เหมาะสม

สร้างค่า Nonce ที่เหมาะสม

ใช้เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อสร้างค่า Nonce ที่คาดเดาได้ยาก

  • สร้างค่าแฮชตามรหัสของผู้ใช้
  • สร้างค่าแบบสุ่มตามผู้ใช้แต่ละราย จัดเก็บค่าแบบสุ่มนี้ไว้ในเซิร์ฟเวอร์ของแอปโดยเป็นส่วนหนึ่งของแอตทริบิวต์ของผู้ใช้รายนั้น

ยืนยันข้อมูลการตอบกลับจากเซิร์ฟเวอร์

เมื่อตรวจสอบข้อมูลการตอบกลับที่เซิร์ฟเวอร์ของแอปส่งไปยังแอป ให้ตรวจสอบว่าการตอบกลับของไลบรารีการยืนยันใบอนุญาตไม่ได้ถูกปลอมแปลง ตรวจสอบลายเซ็นที่รวมอยู่ในข้อมูลการตอบกลับของเซิร์ฟเวอร์แอปโดยเปรียบเทียบกับคีย์ที่แอปได้รับจาก Google Play ในขั้นตอนก่อนหน้า

นอกจากนี้ โปรดทราบว่าบล็อกเฉพาะสำหรับคลังการยืนยันใบอนุญาต (LVL) เป็นส่วนเดียวที่มีการเซ็นชื่อ ดังนั้น ข้อมูลนี้จึงเป็นส่วนเดียวของข้อมูลการตอบกลับจากเซิร์ฟเวอร์แอปที่แอปควรเชื่อถือ