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 trực tiếp bằng ứng dụng Cửa hàng Play thông qua AIDL, chẳng hạn như những hoạt động 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 thực hiện từ 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ề API 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ủ cần phải hỗ trợ đồng thời cả hai API để hỗ trợ 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, 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 sử dụng tăng 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.
  • Hãy đả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 toàn vẹn của Play.

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

  • Hã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 API. Hãy đảm bảo mã phân tích cú pháp cũng như 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 yêu cầu phải có byte[].

  • "An toàn với URL" có nghĩa là sử dụng biến thể "an toàn với URL và tên tệp" của Base64 (xem mục 5, RFC 4648), trong đó "-" và "_" được sử dụng thay cho "+" và "/". Để biết thêm thông tin về mã hoá Base64, hãy xem phần RFC 4648.
  • "Không đóng gói" có nghĩa là bỏ qua tất cả dấu ngắt dòng. Điều này có nghĩa là 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 phần 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 device_recognition_verdict
FALSE FALSE Empty labels
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Empty labels
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 sử dụng chiến lược thực thi phức tạp và cần tất 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. Hãy đảm bảo độ trễ tối thiểu ít nhất 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ế API cấp phép ứng dụng tuỳ chọn

Nếu đang sử dụng API Cấp phép ứng dụng, 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ó 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.