Xử lý việc phát hành thông tin xác thực bằng ứng dụng người dùng

Để nhận và lưu trữ thông tin xác thực từ tổ chức phát hành, ứng dụng của chủ sở hữu cần xử lý các quy trình phát hành. Bạn có thể kích hoạt việc cấp thông tin xác thực theo hai cách:

  • Quy trình do tổ chức phát hành bắt đầu: người dùng kích hoạt yêu cầu phát hành VDC từ một ứng dụng hoặc trang web của tổ chức phát hành. Ví dụ: một trang web có thể cung cấp cho người dùng lựa chọn "Thêm hộ chiếu vào ví". Tổ chức phát hành gọi API phát hành của Trình quản lý thông tin xác thực để gửi yêu cầu Đề nghị cấp thông tin xác thực OpenID4VCI. Để xử lý các yêu cầu như vậy, trước tiên, người lưu giữ phải tích hợp với Trình quản lý thông tin xác thực để đăng ký siêu dữ liệu của mình. Trình quản lý thông tin xác thực sẽ hiển thị các lựa chọn phù hợp để người dùng chọn. Sau khi người dùng chọn một ứng dụng của bên lưu giữ, ứng dụng đó sẽ được gọi và có thể tiếp tục thực hiện các bước cần thiết để hoàn tất quy trình phát hành.
  • Quy trình do chủ sở hữu bắt đầu: người dùng yêu cầu thêm VDC từ ứng dụng của chủ sở hữu. Ví dụ: một chủ sở hữu có thể cung cấp nút "Thêm hộ chiếu của bạn". Trong trường hợp này, người sở hữu sẽ duy trì danh sách và siêu dữ liệu của tổ chức phát hành được hỗ trợ. Ứng dụng không cần tích hợp với Trình quản lý thông tin xác thực Android để hoàn tất chức năng này.

Để biết thêm thông tin về cách thông tin xác thực hoạt động với Holder API, hãy xem bài viết Giới thiệu về cách lưu trữ thông tin xác thực kỹ thuật số.

Khả năng tương thích với phiên bản Android

Holder API được hỗ trợ trên Android 6 (cấp độ API 23) trở lên.

Triển khai

Để sử dụng API Trình quản lý thông tin xác thực, 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:

Groovy

dependencies {
    // Use to implement credentials registrys

    implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04"
    implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04"

}

Kotlin

dependencies {
    // Use to implement credentials registrys

    implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04")
    implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04")

}

Tạo RegistryManager

Tạo một thực thể RegistryManager và đăng ký một yêu cầu RegisterCreationOptionsRequest với thực thể đó.

val registryManager = RegistryManager.create(context)

try {
    registryManager.registerCreationOptions(object :
        RegisterCreationOptionsRequest(
            creationOptions = buildIssuanceData(),
            matcher = loadIssuanceMatcher(),
            type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
            id = "openid4vci",
        ) {}
    )
} catch (e: Exception) {
    Log.e(TAG, "Issuance registration failed.", e)
}

Trình so khớp là một tệp nhị phân WebAssembly (Wasm) nhận creationOptions được đặt trong quá trình đăng ký và thông tin xác thực do công ty phát hành gửi để xác định các mục hiển thị trên giao diện người dùng của Trình quản lý thông tin xác thực. Tham khảo ứng dụng ví mẫu nguồn mở để xem ví dụ về trình so khớp.

Xử lý yêu cầu phát hành

Tiếp theo, ví cần xử lý khi người dùng chọn một lựa chọn tạo thông tin xác thực. Xác định một hoạt động theo dõi bộ lọc ý định androidx.credentials.registry.provider.action.CREATE_CREDENTIAL, như minh hoạ trong ví dụ về ví.

Ý định khởi chạy hoạt động chứa yêu cầu tạo và nguồn gốc gọi, bạn có thể trích xuất bằng hàm PendingIntentHandler.retrieveProviderCreateCredentialRequest. API này trả về một ProviderCreateCredentialRequest chứa tất cả thông tin liên quan đến yêu cầu tạo. Có hai 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.
  • Yêu cầu từ ứng dụng gọi điện. Bạn có thể truy xuất yêu cầu này bằng getCallingRequest, lệnh này sẽ trả về CreateCredentialRequest. Nếu yêu cầu là dành cho thông tin xác thực kỹ thuật số, thì đó là một thực thể của CreateDigitalCredentialRequest, chứa JSON của yêu cầu phát hành trong thuộc tính requestJson. Bạn có thể xử lý việc đó bằng mã mẫu sau:
val pendingIntentRequest =
    PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
    Log.i(TAG, "Got DC creation request: ${request.requestJson}")
    processCreationRequest(request.requestJson)
}

Chứng thực khoá

Hãy lưu ý những điều sau về quy trình chứng thực khoá:

  • Khi tạo chứng thực khoá, bạn có thể đang sử dụng BigInteger.toByteArray để chuyển đổi tài liệu khoá thành, ví dụ: khoá web JSON. Đôi khi, phương thức này có thể thêm một byte dấu và gây ra lỗi xác thực. Nếu trường hợp này xảy ra, hãy xoá các byte này trước khi gửi chứng thực khoá cho công ty phát hành.
  • Bạn nên sử dụng android_key_attestation làm loại bằng chứng khoá.

Trả về phản hồi tạo

Sau khi ví hoàn tất các bước cần thiết để lưu thông tin xác thực, hãy hoàn tất hoạt động bằng phản hồi thông tin xác thực:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
    resultData,
    CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()

Nếu có ngoại lệ, bạn có thể gửi ngoại lệ thông tin xác thực tương tự:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
    resultData,
    CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()

Để xem ví dụ đầy đủ về cách trả về phản hồi thông tin xác thực theo bối cảnh, hãy xem ứng dụng mẫu.