Di chuyển từ API Chứng thực SafetyNet

Nếu đã xác minh phản hồi bằng một máy chủ đáng tin cậy thì bạn sẽ có thể di chuyển thẳng từ API Chứng thực SafetyNet sang API Tính toàn vẹn của Play. Bạn cũng có thể dùng API Tính toàn vẹn của Play để thay thế các quy trình kiểm tra Cấp phép ứng dụng được thực hiện trực tiếp với ứng dụng Cửa hàng Play thông qua AIDL, chẳng hạn như những quy trình kiểm tra do Thư viện xác minh cấp phép (LVL) thực hiện. Hầu hết thay đổi cần thiết đều nằm bên phía máy chủ đáng tin cậy và máy chủ này cần đọc cũng như phân tích mã thông báo phản hồi về Tính toàn vẹn của Play. Lưu ý rằng trong quá trình di chuyển, cả ứng dụng và máy chủ đều cần hỗ trợ đồng thời cả hai API để hỗ trợ các ứng dụng cũ chưa được cập nhật.

Nếu ứng dụng của bạn được tăng hạn mức giới hạn cho API Chứng thực SafetyNet, thì bạn nên kiểm tra cấp sử dụng cho API Tính toàn vẹn của Play và yêu cầu chuyển sang cấp cao hơn nếu cần.

Những yêu cầu thay đổi sau là cần thiết để hỗ trợ API Tính toàn vẹn của Play:

Ứng dụng Android:

  • Đảm bảo rằng mã đang truyền số chỉ dùng một lần có định dạng chính xác đến trình tạo IntegrityTokenRequest:
    • String (thay vì một mảng byte)
    • An toàn với URL
    • Mã hoá dưới dạng Base64 và không đóng gói
    • Tối thiểu 16 ký tự
    • Tối đa 500 ký tự
  • Xem xét logic thử lại và đảm bảo ứng dụng xử lý lỗi một cách phù hợp.
  • Đảm bảo dữ liệu phản hồi đã được gửi đến máy chủ đáng tin cậy và cho phép phân biệt giữa phản hồi của API Chứng thực SafetyNet và phản hồi của API Tính toàn vẹn của Play.

Máy chủ đáng tin cậy:

  • Xem xét logic tạo số chỉ dùng một lần và đảm bảo logic đó đáp ứng yêu cầu của API Tính toàn vẹn của Play.
  • Đảm bảo mã máy chủ có thể phân biệt giữa phản hồi của API Chứng thực SafetyNet và phản hồi của API Tính toàn vẹn của Play. Hãy đảm bảo mã này phân tích cú pháp và xác thực các phản hồi đó đúng cách.
  • Thêm logic để xác thực và phân tích cú pháp phản hồi của API Tính toàn vẹn của Play.
  • Vì phản hồi của API Tính toàn vẹn của Play mới cung cấp thêm thông tin chi tiết, nên bạn có thể cần phải cải thiện logic đưa ra quyết định và dữ liệu phản hồi gửi về thiết bị của ứng dụng. Để biết thêm thông tin, hãy xem mục Liên kết phản hồi của API trong chủ đề này.

Mã hoá số chỉ dùng một lần

Số chỉ dùng một lần liên quan đến tính toàn vẹn phải được truyền tới API Tính toàn vẹn của Play dưới dạng được mã hoá Base64, an toàn với URL, và không đóng gói String. Định dạng này sẽ khác với API Chứng thực SafetyNet và yêu cầu phải có byte[].

  • "URL-safe" (An toàn với URL) nghĩa là sử dụng biến thể "URL and filename-safe" (an toàn với URL và tên tệp) của Base64 (xem mục 5, RFC 4648), trong đó "-" và "_" được dùng thay cho "+" và "/". Để biết thêm thông tin về mã hoá Base64, hãy xem RFC 4648.
  • "no-wrap" (không đóng gói) nghĩa là bỏ qua tất cả dấu ngắt dòng. Điều này có nghĩa dữ liệu đầu ra là một dòng dài.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Ngoài ra, hãy đảm bảo quy trình tạo số chỉ dùng một lần đồng bộ với nguyên tắc về API Tính toàn vẹn của Play.

Liên kết phản hồi của API

Bảng sau đây liên kết các trường tương ứng của API Chứng thực SafetyNet với API Tính toàn vẹn của Play.

API Chứng thực SafetyNet API Tính toàn vẹn của Play Ghi chú
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Đảm bảo đã đặt appRecognitionVerdict thành PLAY_RECOGNIZED
ctsProfileMatch Được kết hợp thành deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Được kết hợp thành deviceIntegrity.deviceRecognitionVerdict
evaluationType Được kết hợp thành deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available Danh sách nhãn tính toàn vẹn của thiết bị sẽ trống.

Liên kết kết quả về tính toàn vẹn của thiết bị

API Chứng thực SafetyNet API Tính toàn vẹn của Play
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Không có nhãn nào
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Không có nhãn nào
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Bạn có thể cần phải định cấu hình tập hợp các phản hồi về tính toàn vẹn của thiết bị nếu ứng dụng của bạn dùng chiến lược thực thi phức tạp và cần tất cả các giá trị có thể có.

Logic thử lại API Tính toàn vẹn của Play

Ứng dụng nên thử lại các lệnh gọi API trong trường hợp có một số mã lỗi nhất định. Hãy nhớ xem lại tất cả mã lỗi và đảm bảo rằng ứng dụng sẽ thử lại khi cần theo hình thức thời gian đợi luỹ thừa. Vui lòng đảm bảo độ trễ tối thiểu ít nhất là 5 giây, tăng theo luỹ thừa (5 giây, 10 giây, 20 giây, 40 giây, v.v.) để cung cấp cho API đủ thời gian đánh giá tính toàn vẹn của thiết bị và ứng dụng.

Thay thế App Licensing API (API Cấp phép ứng dụng) không bắt buộc

Nếu đang sử dụng API Cấp phép ứng dụng, thì bạn có thể tuỳ ý chuyển sang sử dụng API Tính toàn vẹn của Play vì mã thông báo API Tính toàn vẹn của Play bao gồm thông tin cấp phép của ứng dụng. Tương tự như trong quá trình di chuyển API Chứng thực SafetyNet, một số thiết bị sẽ cần giữ lại phiên bản cũ hơn của ứng dụng. Máy chủ đáng tin cậy của bạn có thể xử lý cả phản hồi của API Cấp phép ứng dụng và phản hồi của API Tính toàn vẹn của Play.

Nhận phản hồi cho đến khi ngừng hoạt động hoàn toàn

Nếu chưa di chuyển sang API Tính toàn vẹn của Play hoặc xoá Chứng thực SafetyNet trước thời hạn di chuyển (ngày 31/1/2024), thì bạn có thể hoàn tất biểu mẫu này để yêu cầu gia hạn. Nếu được phê duyệt gia hạn, ứng dụng của bạn sẽ tiếp tục nhận được phản hồi từ Chứng thực SafetyNet cho đến mốc thời hạn ngừng hoạt động hoàn toàn (ngày 31/1/2025).