Di chuyển từ API Chứng thực SafetyNet | Google Play | Android Developers

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.

Lưu ý:

đối với API chứng thực SafetyNet, bạn có thể thực hiện quy trình xác thực phản hồi trực tiếp trên thiết bị, mặc dù chúng tôi không khuyến khích việc này . Để sử dụng API Tính toàn vẹn của Play mới, bạn cần có một thành phần máy chủ đáng tin cậy chịu trách nhiệm giải mã và xác thực mã thông báo phản hồi. Bạn hoàn toàn không nên giữ khoá tự quản lý của API Tính toàn vẹn của Play trên thiết bị vì điều này tạo điều kiện để kẻ tấn công giả mạo thông tin phản hồi.

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.