Credential Manager - Holder API

Kimlik Bilgisi Yöneticisi - Holder API, Android uygulamalarının dijital kimlik bilgilerini yönetmesine ve doğrulayıcılara sunmasına olanak tanır.

Başlayın

Credential Manager - Holder API'yi kullanmak için uygulama modülünüzün derleme komut dosyasına aşağıdaki bağımlılıkları ekleyin:

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

Kimlik bilgilerini Kimlik Bilgisi Yöneticisi'ne kaydetme

Kimlik Bilgisi Yöneticisi'nin istek geldiğinde kimlik bilgisi seçicide filtreleyip görüntüleyebilmesi için cüzdanların kimlik bilgisi meta verilerini kaydetmesi gerekir.

Kimlik Bilgisi Yöneticisi'ndeki dijital kimlik bilgileri kullanıcı arayüzünü gösteren resim
Şekil 1. Dijital kimlik bilgileri kullanıcı arayüzü.

Kimlik Bilgisi Yöneticisi Seçici kullanıcı arayüzü

Bu meta verilerin biçimi bir RegisterCredentialsRequest öğesine iletilir. Bir [RegistryManager][1] oluşturun ve kimlik bilgilerini kaydedin:

Bu örnekte meta veriler, kimlik bilgileri girişlerinden oluşan bir veritabanından derlenir. Uygulama yüklenirken meta verileri kaydeden örnek cüzdanımızda bir referans bulabilirsiniz. Gelecekte Jetpack API, kimlik bilgisi veritabanı oluşturmayı destekleyecektir. Bu noktada, kimlik bilgisi meta verilerini iyi tanımlanmış veri yapıları olarak kaydedebilirsiniz.

Kayıt defteri, cihaz yeniden başlatıldığında da devam eder. Aynı kimlik ve türdeki kayıt otoritesini yeniden kaydettiğinizde önceki kayıt otoritesi kaydının üzerine yazılır. Bu nedenle, yalnızca kimlik bilgisi verileriniz değiştiğinde yeniden kaydolmanız gerekir.

İsteğe bağlı: Eşleştirici oluşturma

Kimlik Bilgisi Yöneticisi, protokole karşı değildir; meta veri kayıt defterini opak bir blob olarak değerlendirir ve içeriğini doğrulamaz veya kontrol etmez. Bu nedenle, cüzdanın kendi verilerini işleyebilecek ve gelen bir isteğe göre görüntülenen meta verileri oluşturabilecek bir eşleştirici (çalıştırılabilir bir ikili dosya) sağlaması gerekir. Kimlik Bilgisi Yöneticisi, eşleştiriciyi ağ veya disk erişimi olmayan bir korumalı ortamda çalıştırır. Böylece, kullanıcı arayüzü kullanıcıya sunulmadan önce cüzdana hiçbir şey sızmaz.

Kimlik Bilgisi Yöneticisi API'si, popüler protokoller (şu anda OpenID4VP) için eşleştiriciler sağlar. Henüz resmi olarak yayınlanmadığı için şimdilik OpenID4VP v24 protokolü için örnek eşleştiricimizi kullanın.

Seçilen kimlik bilgilerini işleme

Ardından, kullanıcı tarafından bir kimlik bilgisi seçildiğinde cüzdanın bu durumu ele alması gerekir. androidx.credentials.registry.provider.action.GET_CREDENTIAL intent filtresini dinleyen bir etkinlik tanımlayabilirsiniz. Örnek cüzdanımızda bu prosedür gösterilmektedir.

Etkinliği başlatan intent, doğrulayıcı isteğini ve çağıran kaynağı içerir. Bu bilgiler PendingIntentHandler.retrieveProviderGetCredentialRequest işleviyle ayıklanabilir. API, belirli doğrulayıcı isteğiyle ilişkili tüm bilgileri içeren bir ProviderGetCredentialRequest döndürür. Üç temel bileşen vardır:

  • İsteği gönderen uygulama. Bu adresi getCallingAppInfo ile alabilirsiniz.
  • Seçilen kimlik bilgisi. Kullanıcının hangi adayı seçtiği hakkında bilgi edinmek için selectedEntryId uzantı yöntemini kullanabilirsiniz. Bu yöntem, kaydettiğiniz kimlik bilgisi kimliğiyle eşleşir.
  • Doğrulayıcının yaptığı belirli istekler. Bu değeri getCredentialOptions yönteminden alabilirsiniz. Bu durumda, bu listede Dijital Kimlik Bilgileri isteğini içeren bir GetDigitalCredentialOption bulmanız gerekir.

Doğrulayıcı genellikle dijital kimlik bilgisi sunma isteği gönderir. Bu isteği aşağıdaki örnek kodla işleyebilirsiniz:

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

Buna örnek olarak örnek cüzdanımızdaki görseli inceleyebilirsiniz.

Cüzdan kullanıcı arayüzünü oluşturma

Kimlik bilgisi seçildikten sonra cüzdan çağrılır ve kullanıcı, kullanıcı arayüzüne yönlendirilir. Örnekte bu bir biyometrik istem'dir.

Kimlik bilgisi yanıtını döndürme

Cüzdan sonucu geri göndermeye hazır olduğunda, kimlik bilgisi yanıtıyla etkinliği tamamlayarak bunu yapabilirsiniz:

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

Bir istisna varsa kimlik bilgisi istisnasını da benzer şekilde gönderebilirsiniz:

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

Kimlik bilgisi yanıtının bağlam içinde nasıl döndürüleceğine dair bir örnek için örnek uygulamaya bakın.