API Trình quản lý thông tin xác thực – Người nắm giữ cho phép các ứng dụng Android quản lý và trình bày thông tin xác thực kỹ thuật số cho người xác minh.
Bắt đầu
Để sử dụng Credential Manager – Holder API, hãy thêm các phần phụ thuộc sau vào tập lệnh bản dựng của mô-đun ứng dụng:
// In your app module's build.gradle:
dependencies {
implementation(libs.androidx.registry.provider)
implementation(libs.androidx.registry.provider.play.services)
}
// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha02"
androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }
Đăng ký thông tin xác thực bằng Trình quản lý thông tin xác thực
Ví cần đăng ký siêu dữ liệu thông tin đăng nhập để Trình quản lý thông tin đăng nhập có thể lọc và hiển thị thông tin đăng nhập đó trong bộ chọn thông tin đăng nhập khi có yêu cầu.
Giao diện người dùng của bộ chọn Trình quản lý thông tin xác thực
Định dạng cho siêu dữ liệu này được truyền vào một RegisterCredentialsRequest.
Tạo một [RegistryManager][1] và đăng ký thông tin đăng nhập:
Trong ví dụ này, siêu dữ liệu được biên dịch từ một cơ sở dữ liệu gồm các mục thông tin đăng nhập. Bạn có thể tìm thấy thông tin tham chiếu trong ví mẫu của chúng tôi. Thông tin này sẽ đăng ký siêu dữ liệu khi tải ứng dụng. Trong tương lai, API Jetpack sẽ hỗ trợ thành phần cơ sở dữ liệu thông tin đăng nhập. Tại thời điểm đó, bạn cũng có thể đăng ký siêu dữ liệu thông tin đăng nhập dưới dạng các cấu trúc dữ liệu được xác định rõ.
Sổ đăng ký vẫn được duy trì trong các lần khởi động lại thiết bị. Việc đăng ký lại cùng một sổ đăng ký có cùng mã nhận dạng và loại sẽ ghi đè bản ghi đăng ký trước đó. Do đó, bạn chỉ cần đăng ký lại khi dữ liệu thông tin xác thực của bạn thay đổi.
Không bắt buộc: Tạo một đối tượng so khớp
Trình quản lý thông tin xác thực không phụ thuộc vào giao thức; trình quản lý này coi sổ đăng ký siêu dữ liệu là một blob mờ và không xác minh hoặc kiểm tra nội dung của sổ đăng ký. Do đó, ví phải cung cấp một chương trình so khớp, một tệp nhị phân có thể thực thi để xử lý dữ liệu của riêng ví và tạo siêu dữ liệu hiển thị dựa trên một yêu cầu đến. Credential Manager chạy trình so khớp trong một môi trường hộp cát mà không có quyền truy cập vào mạng hoặc đĩa để không có thông tin nào bị rò rỉ vào ví trước khi giao diện người dùng được hiển thị cho người dùng.
API Trình quản lý thông tin xác thực sẽ cung cấp các đối sánh cho các giao thức phổ biến, hiện tại là OpenID4VP. Công cụ này chưa được phát hành chính thức, vì vậy, hiện tại hãy sử dụng trình so khớp mẫu của chúng tôi cho giao thức OpenID4VP.
Xử lý thông tin đăng nhập đã chọn
Tiếp theo, ví cần xử lý khi người dùng chọn một thông tin xác thực. Bạn có thể xác định một Hoạt động theo dõi bộ lọc ý định androidx.credentials.registry.provider.action.GET_CREDENTIAL.
Ví dụ về ví của chúng tôi minh hoạ quy trình này.
Ý định khởi chạy hoạt động chứa yêu cầu của Trình xác minh và nguồn gốc gọi. Bạn có thể trích xuất bằng hàm PendingIntentHandler.retrieveProviderGetCredentialRequest. API này trả về một ProviderGetCredentialRequest chứa tất cả thông tin liên quan đến yêu cầu của trình xác minh. Có 3 thành phần chính:
- Ứng dụng đã đưa ra yêu cầu. Bạn có thể truy xuất thông tin này bằng
getCallingAppInfo. - Thông tin đăng nhập đã chọn. Bạn có thể nhận thông tin về ứng viên mà người dùng đã chọn thông qua phương thức mở rộng
selectedEntryId; phương thức này sẽ khớp với mã nhận dạng thông tin đăng nhập mà bạn đã đăng ký. - Mọi yêu cầu cụ thể mà người xác minh đã đưa ra. Bạn có thể lấy thông tin này từ phương thức
getCredentialOptions. Trong trường hợp này, bạn có thể thấy mộtGetDigitalCredentialOptiontrong danh sách này, chứa yêu cầu về Thông tin đăng nhập kỹ thuật số.
Thông thường, trình xác minh sẽ đưa ra yêu cầu trình bày thông tin đăng nhập kỹ thuật số để bạn có thể xử lý yêu cầu đó bằng đoạn mã mẫu sau:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
Bạn có thể xem ví dụ về việc này trong ví mẫu của chúng tôi.
Hiển thị giao diện người dùng của ví
Sau khi người dùng chọn thông tin đăng nhập, ví sẽ được gọi và người dùng sẽ được chuyển qua giao diện người dùng của ví. Trong mẫu này, đây là một lời nhắc sinh trắc học.
Trả về phản hồi thông tin xác thực
Sau khi ví sẵn sàng gửi lại kết quả, bạn có thể hoàn tất việc này bằng cách kết thúc hoạt động bằng phản hồi về thông tin đăng nhập:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
Nếu có trường hợp ngoại lệ, bạn cũng có thể gửi thông tin ngoại lệ về thông tin đăng nhập:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Hãy tham khảo ứng dụng mẫu để xem ví dụ về cách trả về phản hồi về thông tin đăng nhập theo bối cảnh.