Credential Manager - Holder API

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

Başlayın

Credential Manager - Holder API'yi kullanmak için uygulamanızın modülünü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

Cüzdanın, kimlik bilgisi yöneticisinin filtreleyebilmesi ve istek geldiğinde kimlik bilgisi seçicide gösterebilmesi için kimlik bilgisi meta verilerini kaydetmesi gerekir.

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

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

Bu meta verilerin biçimi RegisterCredentialsRequest içine aktarılır. [RegistryManager][1] oluşturun ve kimlik bilgilerini kaydedin:

Bu örnekte, meta veriler kimlik bilgisi girişlerinin bulunduğu bir veritabanından derlenir. Uygulama yüklendiğinde meta verileri kaydeden örnek cüzdanımızda bir referans bulabilirsiniz. Gelecekte, kimlik bilgisi veritabanı oluşturma Jetpack API'si tarafından desteklenecektir. Bu noktada, kimlik bilgisi meta verilerini iyi tanımlanmış veri yapıları olarak kaydedebilirsiniz.

Kayıt, cihaz yeniden başlatıldığında da kalır. Aynı kimlik ve türdeki aynı kayıt defterinin yeniden kaydedilmesi, önceki kayıt defteri 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 bağlı değildir. Meta veri kayıt defterini opak bir blob olarak ele alır ve içeriğini doğrulamaz veya kontrol etmez. Bu nedenle, cüzdanın bir eşleştirici sağlaması gerekir. Bu eşleştirici, cüzdanın kendi verilerini işleyebilen ve gelen bir isteğe göre görüntüleme meta verilerini oluşturabilen çalıştırılabilir bir ikilidir. Kimlik bilgisi yöneticisi, eşleştiriciyi ağ veya disk erişimi olmayan bir sandbox ortamında çalıştırır. Böylece, kullanıcı arayüzü kullanıcıya oluşturulmadan önce cüzdana hiçbir bilgi sızmaz.

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

Seçili bir kimlik bilgisini kullanma

Ardından, cüzdanın kullanıcı tarafından bir kimlik bilgisi seçildiğinde ne yapması gerektiğini belirlemesi 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 amaç, doğrulayıcı isteğini ve PendingIntentHandler.retrieveProviderGetCredentialRequest işleviyle çıkarılabilen çağırma kaynağını içerir. API, verilen 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 bilgiyi getCallingAppInfo ile alabilirsiniz.
  • Seçilen kimlik bilgisi. Kullanıcının hangi adayı seçtiğiyle ilgili bilgileri selectedEntryId uzantı yöntemi aracılığıyla alabilirsiniz. Bu yöntem, kaydettiğiniz kimlik bilgisi kimliğiyle eşleşir.
  • Doğrulayıcının yaptığı özel istekler. Bunu getCredentialOptions yönteminden alabilirsiniz. Bu durumda, Dijital Yeterlilik Belgesi isteğini içeren bir GetDigitalCredentialOption görmeyi beklemelisiniz.

Doğrulayan taraf, genellikle dijital kimlik bilgisi sunma isteğinde bulunur. 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)
    }
}

Bunun bir örneğini örnek cüzdanımızda görebilirsiniz.

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

Kimlik bilgisi seçildikten sonra cüzdan çağrılır ve kullanıcı, cüzdanın kullanıcı arayüzünde yönlendirilir. Örnekte bu, biyometrik istem olarak gösterilmiştir.

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 benzer şekilde kimlik bilgisi istisnası da gönderebilirsiniz:

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

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