Note: For licensing in online apps and games, we recommend using the Play Integrity API. Learn more.

Thêm xác minh giấy phép phía máy chủ vào ứng dụng

Khi xác minh rằng người dùng đã mua hoặc tải bản sao hợp lệ của ứng dụng xuống từ Cửa hàng Google Play, tốt nhất là bạn nên kiểm tra giấy phép trên một máy chủ mà bạn kiểm soát.

Hướng dẫn này trình bày quy trình từng bước để hoàn tất quá trình xác minh giấy phép phía máy chủ và trình bày các phương pháp hay nhất có liên quan đến việc thực hiện quy trình kiểm tra này.

Tổng quan về quy trình

Hình 1 cho thấy cách chuyển thông tin giữa ứng dụng, Google Play và máy chủ riêng tư:

Sơ đồ luồng dữ liệu
Hình 1. Luồng dữ liệu giữa ứng dụng và Google Play, sau đó giữa ứng dụng và máy chủ riêng
  1. Ứng dụng gửi yêu cầu đến Google Play, điều tra xem một người dùng cụ thể đã mua hoặc tải bản sao hợp lệ của ứng dụng xuống hay không.
  2. Google Play phản hồi bằng cách gửi một đối tượng dữ liệu phản hồi, một đối tượng thuộc loại ResponseData tới ứng dụng. Đối tượng này là một phần thông tin đã ký, cho biết rõ liệu người dùng đã mua hoặc tải bản sao hợp lệ của ứng dụng xuống.
  3. Ứng dụng gửi yêu cầu đến máy chủ riêng mà bạn kiểm soát, xác minh nội dung của dữ liệu phản hồi.
  4. Máy chủ sẽ phản hồi bằng cách gửi một trạng thái tới ứng dụng, cho biết liệu người dùng đã thực sự mua hoặc tải bản sao hợp lệ của ứng dụng xuống hay chưa. Nếu máy chủ cung cấp một thông báo "thành công", hãy xác minh phản hồi rồi cấp quyền truy cập cho người dùng vào các tài nguyên cần có giấy phép.

Dữ liệu phản hồi được Google Play ký, sau đó được kiểm tra trên máy chủ, bởi vậy nên không có cách nào để sửa đổi đối tượng trên thiết bị đang chạy ứng dụng. Nếu ứng dụng dựa vào máy chủ và chỉ cung cấp tài nguyên cho người dùng hợp lệ thì ứng dụng sẽ được bảo vệ tốt hơn nhiều trước người dùng trái phép.

Các mục sau đây cung cấp thêm những điểm cần lưu ý khi thực hiện quy trình xác minh giấy phép phía máy chủ.

Biện pháp bảo vệ khỏi các cuộc tấn công phát lại

Sau khi nhận được phản hồi từ Google Play về trạng thái giấy phép của người dùng, người dùng có thể sao chép dữ liệu phản hồi và sử dụng chúng nhiều lần, hoặc cung cấp dữ liệu này cho những người dùng khác để họ giả mạo yêu cầu tới máy chủ riêng của ứng dụng. Loại hành động này được gọi là tấn công phát lại.

Để giảm khả năng người dùng thực hiện thành công các cuộc tấn công phát lại, hãy thực hiện các biện pháp sau trước khi gửi yêu cầu đến máy chủ ứng dụng:

  • Kiểm tra dấu thời gian trong dữ liệu phản hồi để đảm bảo rằng Google Play đã tạo phản hồi gần đây.

  • Hãy hạn chế số lượng gửi/nhận yêu cầu lên máy chủ, chẳng hạn như thời gian đợi luỹ thừa để giảm số lần ứng dụng cố gắng gửi cùng một dữ liệu phản hồi đến máy chủ của ứng dụng.

  • Trước khi xác minh nội dung dữ liệu phản hồi của Google Play trên máy chủ riêng, hãy tạo một yêu cầu ban đầu, dựa trên cơ chế xác thực tới máy chủ riêng. Trong yêu cầu đầu tiên này, hãy gửi thông tin đăng nhập của người dùng đến máy chủ và yêu cầu máy chủ đó phản hồi bằng số chỉ dùng một lần hoặc một số chỉ được dùng một lần. Sau đó, bạn có thể đưa số chỉ dùng một lần này vào yêu cầu tiếp theo tới máy chủ riêng để yêu cầu dữ liệu xác minh giấy phép. Để biết chi tiết về cách chọn giá trị phù hợp cho số chỉ dùng một lần, hãy xem mục tạo giá trị số chỉ dùng một lần thích hợp.

Tạo giá trị số chỉ dùng một lần thích hợp

Sử dụng một trong các kỹ thuật sau để tạo giá trị số chỉ dùng một lần khó đoán:

  • Tạo giá trị băm dựa trên mã nhận dạng của người dùng đó.
  • Tạo một giá trị ngẫu nhiên cho mỗi người dùng. Lưu trữ giá trị ngẫu nhiên này trên máy chủ của ứng dụng như một phần trong thuộc tính của người dùng nhất định.

Xác minh dữ liệu phản hồi từ máy chủ

Khi xem lại dữ liệu phản hồi mà máy chủ ứng dụng gửi đến ứng dụng, hãy đảm bảo rằng phản hồi Thư viện xác minh giấy phép không bị giả mạo. Xác minh chữ ký có trong dữ liệu phản hồi của máy chủ ứng dụng bằng cách so sánh với khoá mà ứng dụng của bạn nhận được từ Google Play ở bước trước đó.

Bạn cũng nên nhớ rằng khối cụ thể dành cho Thư viện xác minh giấy phép (LVL) là phần duy nhất được ký. Do đó, đó là phần duy nhất trong dữ liệu phản hồi của máy chủ ứng dụng mà ứng dụng nên tin tưởng.