Dijital kimlik bilgilerini doğrulama

Android uygulamalarındaki dijital kimlik bilgisi doğrulaması, bir kullanıcının kimliğini (ör. resmi kimlik), bu kullanıcıyla ilgili özellikleri (ör. sürücü belgesi, akademik derece veya yaş ya da adres gibi özellikler) doğrulamak ve yetkilendirmek ya da bir öğenin gerçekliğini doğrulamak için kimlik bilgisinin verilmesi ve doğrulanması gereken diğer senaryolarda kullanılabilir.

Dijital Kimlik Bilgileri, kullanıcının dijital cüzdanındaki doğrulanabilir dijital kimlik bilgilerine nasıl erişileceğini belirten ve W3C Kimlik Bilgisi Yönetimi API'si ile web kullanım alanları için uygulanan herkese açık bir W3C kuluçka standardıdır. Android'de dijital kimlik bilgilerini doğrulamak için Kimlik Bilgisi Yöneticisi'nin DigitalCredential API'si kullanılır.

Uygulama

Android projenizdeki dijital kimlik bilgilerini doğrulamak için aşağıdakileri yapın:

  1. Uygulamanızın derleme komut dosyasına bağımlılık ekleyin ve bir CredentialManager sınıfını başlatın.
  2. Dijital kimlik bilgisi isteği oluşturun ve bunu bir DigitalCredentialOption başlatmak için kullanın. Ardından GetCredentialRequest'yi oluşturun.
  3. Başarılı bir GetCredentialResponse almak veya oluşabilecek istisnaları işlemek için oluşturulan isteği kullanarak getCredential akışını başlatın. Başarılı bir şekilde aldıktan sonra yanıtı doğrulayın.

Bağımlılıklar ekleme ve başlatma

Gradle derleme komut dosyanıza aşağıdaki bağımlılıkları ekleyin:

dependencies {
    implementation("androidx.credentials:credentials:1.5.0-beta01")
    implementation("androidx.credentials:credentials-play-services-auth:1.5.0-beta01")
}

Ardından, CredentialManager sınıfının bir örneğini başlatın.

val credentialManager = CredentialManager.create(context)

Dijital kimlik bilgisi isteği oluşturma

Dijital kimlik bilgisi isteği oluşturun ve bir DigitalCredentialOption başlatmak için kullanın.

// The request in the JSON format to conform with
// the JSON-ified Digital Credentials API request definition.
val requestJson = generateRequestFromServer()
val digitalCredentialOption =
    GetDigitalCredentialOption(requestJson = requestJson)

// Use the option from the previous step to build the `GetCredentialRequest`.
val getCredRequest = GetCredentialRequest(
    listOf(digitalCredentialOption)
)

Kimlik bilgisini alma

Oluşturulan istekle getCredential akışını başlatın. İstek başarılı olursa GetCredentialResponse, başarısız olursa GetCredentialException alırsınız.

getCredential akışı, kullanıcının mevcut kimlik bilgisi seçeneklerini sunmak ve seçimini toplamak için Android sistem iletişim kutularını tetikler. Ardından, seçilen kimlik bilgisi seçeneğini içeren cüzdan uygulaması, izin almak ve dijital kimlik bilgisi yanıtı oluşturmak için gereken işlemleri gerçekleştirmek üzere kullanıcı arayüzleri gösterir.

coroutineScope.launch {
    try {
        val result = credentialManager.getCredential(
            context = activityContext,
            request = getCredRequest
        )
        verifyResult(result)
    } catch (e : GetCredentialException) {
        handleFailure(e)
    }
}

// Handle the successfully returned credential.
fun verifyResult(result: GetCredentialResponse) {
    val credential = result.credential
    when (credential) {
        is DigitalCredential -> {
            val responseJson = credential.credentialJson
            validateResponseOnServer(responseJson)
        }
        else -> {
            // Catch any unrecognized credential type here.
            Log.e(TAG, "Unexpected type of credential ${credential.type}")
        }
    }
}

// Handle failure.
fun handleFailure(e: GetCredentialException) {
  when (e) {
        is GetCredentialCancellationException -> {
            // The user intentionally canceled the operation and chose not
            // to share the credential.
        }
        is GetCredentialInterruptedException -> {
            // Retry-able error. Consider retrying the call.
        }
        is NoCredentialException -> {
            // No credential was available.
        }
        is CreateCredentialUnknownException -> {
            // An unknown, usually unexpected, error has occurred. Check the
            // message error for any additional debugging information.
        }
        is CreateCredentialCustomException -> {
            // You have encountered a custom error thrown by the wallet.
            // If you made the API call with a request object that's a
            // subclass of CreateCustomCredentialRequest using a 3rd-party SDK,
            // then you should check for any custom exception type constants
            // within that SDK to match with e.type. Otherwise, drop or log the
            // exception.
        }
        else -> Log.w(TAG, "Unexpected exception type ${e::class.java}")
    }
}