Credential Manager - Holder API

Credential Manager - Holder API memungkinkan aplikasi Android mengelola dan menampilkan kredensial digital kepada verifier.

Memulai

Untuk menggunakan Pengelola Kredensial - Holder API, tambahkan dependensi berikut ke skrip build modul aplikasi Anda:

// 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-alpha01"

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" }

Mendaftarkan kredensial dengan Pengelola Kredensial

Dompet perlu mendaftarkan metadata kredensial agar Pengelola Kredensial dapat memfilter dan menampilkannya di pemilih kredensial saat permintaan masuk.

Gambar yang menampilkan UI kredensial digital di Pengelola Kredensial
Gambar 1. UI kredensial digital.

UI Pemilih Pengelola Kredensial

Format untuk metadata ini diteruskan ke RegisterCredentialsRequest. Buat [RegistryManager][1] dan daftarkan kredensial:

Dalam contoh ini, metadata dikompilasi dari database entri kredensial. Anda dapat menemukan referensi di contoh dompet kami yang mendaftarkan metadata saat aplikasi dimuat. Di masa mendatang, komposisi database kredensial akan didukung oleh Jetpack API. Pada saat itu, Anda dapat mendaftarkan metadata kredensial sebagai struktur data yang ditentukan dengan baik.

Registry tetap ada saat perangkat dimulai ulang. Mendaftarkan ulang registry yang sama dengan ID dan jenis yang sama akan menimpa data registry sebelumnya. Oleh karena itu, Anda hanya perlu mendaftar ulang saat data kredensial Anda telah berubah.

Opsional: Membuat pencocok

Pengelola Kredensial adalah protokol agonistik; Pengelola Kredensial memperlakukan registry metadata sebagai blob buram dan tidak memverifikasi atau memeriksa kontennya. Oleh karena itu, dompet harus menyediakan matcher, biner yang dapat dijalankan yang dapat memproses data milik dompet dan membuat metadata tampilan berdasarkan permintaan yang masuk. Pengelola Kredensial akan menjalankan matcher di lingkungan sandbox tanpa akses jaringan atau disk, sehingga tidak ada yang bocor ke dompet sebelum UI dirender kepada pengguna.

Credential Manager API akan menyediakan pencocok untuk protokol populer, saat ini OpenID4VP. Fitur ini belum dirilis secara resmi, jadi untuk saat ini gunakan pencocok contoh kami untuk protokol OpenID4VP v24.

Menangani kredensial yang dipilih

Selanjutnya, dompet harus menangani saat kredensial dipilih oleh pengguna. Anda dapat menentukan Aktivitas yang memproses filter intent androidx.credentials.registry.provider.action.GET_CREDENTIAL. Contoh dompet kami menunjukkan prosedur ini.

Intent yang meluncurkan aktivitas akan berisi permintaan Verifier dan asal panggilan, yang dapat diekstrak dengan fungsi PendingIntentHandler.retrieveProviderGetCredentialRequest. API menampilkan ProviderGetCredentialRequest yang berisi semua informasi yang terkait dengan permintaan verifikasi tertentu. Ada tiga komponen utama:

  • Aplikasi yang membuat permintaan. Anda dapat mengambilnya dengan getCallingAppInfo.
  • Kredensial yang dipilih. Anda bisa mendapatkan informasi tentang kandidat yang dipilih pengguna melalui metode ekstensi selectedEntryId; ini akan cocok dengan ID kredensial yang Anda daftarkan.
  • Permintaan spesifik apa pun yang telah dibuat verifikasi. Anda bisa mendapatkannya dari metode getCredentialOptions. Dalam hal ini, Anda akan menemukan GetDigitalCredentialOption dalam daftar ini, yang berisi permintaan Kredensial Digital.

Biasanya, verifier akan membuat permintaan presentasi kredensial digital sehingga Anda dapat memprosesnya dengan kode contoh berikut:

request.credentialOptions.forEach { option ->
    if (option is GetDigitalCredentialOption) {
        Log.i(TAG, "Got DC request: ${option.requestJson}")
        processRequest(option.requestJson)
    }
}

Anda dapat melihat contohnya di contoh dompet kami.

Merender UI dompet

Setelah kredensial dipilih, dompet akan dipanggil dan pengguna akan diarahkan melalui UI-nya. Dalam contoh, ini adalah perintah biometrik.

Menampilkan respons kredensial

Setelah dompet siap mengirim kembali hasilnya, Anda dapat melakukannya dengan menyelesaikan aktivitas dengan respons kredensial:

PendingIntentHandler.setGetCredentialResponse(
    resultData,
    GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()

Jika ada pengecualian, Anda juga dapat mengirim pengecualian kredensial:

PendingIntentHandler.setGetCredentialException(
    resultData,
    GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()

Lihat aplikasi contoh untuk mengetahui contoh cara menampilkan respons kredensial dalam konteks.