Android 15'te Kimlik Bilgisi Yöneticisi, kimlik bilgileri için tek dokunuşla akışı destekler. Ürün Sahibi sorumludur. Bu akışta, oluşturulmakta veya kullanılmakta olan kimlik bilgisinin bilgileri, daha fazla seçeneğe erişim noktasıyla birlikte doğrudan Biyometrik İstem'de gösterilir. Bu basitleştirilmiş süreç, kimlik bilgisi oluşturma ve alma sürecini daha verimli ve basit hale getirir.
Koşullar:
- Kullanıcının cihazında biyometri ayarlanmış ve kullanıcı, uygulamalarda kimlik doğrulama için biyometriye izin vermiş olmalıdır.
- Oturum açma akışlarında bu özellik, ilgili hesap için birden fazla kimlik bilgisi (ör. geçiş anahtarı ve şifre) olsa bile yalnızca tek hesap senaryolarında etkindir.
Geçiş anahtarı oluşturma akışlarında tek dokunuşları etkinleştir
Bu yöntemin oluşturma adımları, mevcut kimlik bilgisi oluşturma süreciyle eşleşir. BeginCreatePublicKeyCredentialRequest
içinde,
Geçiş anahtarı içinse isteği işlemek üzere handleCreatePasskeyQuery()
.
is BeginCreatePublicKeyCredentialRequest -> {
Log.i(TAG, "Request is passkey type")
return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}
handleCreatePasskeyQuery()
sayfanıza BiometricPromptData
ekleyin ve
CreateEntry
sınıfı:
val createEntry = CreateEntry(
// Additional properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
Kimlik bilgisi sağlayıcılar, BiometricPromptData
örneğinde allowedAuthenticator
mülkünü açıkça ayarlamalıdır. Bu özellik ayarlanmazsa
varsayılan olarak DEVICE_WEAK
değerine ayarlanır. Gerekirse isteğe bağlı cryptoObject
özelliğini ayarlayın
bir şablon görevi görür.
Tek dokunuşla oturum açma geçiş anahtarı akışlarını etkinleştir
Geçiş anahtarı oluşturma akışına benzer şekilde, bu işlem kullanıcı oturum açma işlemini yönetme için mevcut kurulumu izler. Kimlik doğrulama isteğiyle ilgili bilgileri toplamak için BeginGetPublicKeyCredentialOption
altında populatePasskeyData()
'u kullanın:
is BeginGetPublicKeyCredentialOption -> {
// ... other logic
populatePasskeyData(
origin,
option,
responseBuilder,
autoSelectEnabled,
allowedAuthenticator
)
// ... other logic as needed
}
CreateEntry
'e benzer şekilde, BiometricPromptData
örneği PublicKeyCredentialEntry
örneğine ayarlanır. Açıkça belirtilmediği takdirde
allowedAuthenticator
, varsayılan olarak BIOMETRIC_WEAK
değerine ayarlıdır.
PublicKeyCredentialEntry(
// other properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
Kimlik bilgisi girişi seçimini işleme
Geçiş anahtarı oluşturma için kimlik bilgisi girişi seçimini işlerken veya
oturum açma sırasında geçiş anahtarı seçimi, PendingIntentHandler's
retrieveProviderCreateCredentialRequest
numaralı telefonu arayın veya
retrieveProviderGetCredentialRequest
(uygun şekilde). Bunlar nesne döndürür
içeren bir liste oluşturabilirsiniz. Örneğin, geçiş anahtarı oluşturma girişi seçimini işlerken kodunuzu aşağıdaki gibi güncelleyin:
val createRequest = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
if (createRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = createRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (createRequest.callingRequest is CreatePublicKeyCredentialRequest) {
val publicKeyRequest: CreatePublicKeyCredentialRequest =
createRequest.callingRequest as CreatePublicKeyCredentialRequest
if (biometricPromptResult == null) {
// Do your own authentication flow, if needed
}
else if (biometricPromptResult.isSuccessful) {
createPasskey(
publicKeyRequest.requestJson,
createRequest.callingAppInfo,
publicKeyRequest.clientDataHash,
accountId
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...
}
Bu örnek, biyometrik akışın başarısıyla ilgili bilgiler içerir. Aynı zamanda
kimlik bilgisi hakkında başka bilgiler içerir. Akış başarısız olursa
biometricPromptResult.authenticationError
altındaki hata kodunu girin.
Bu hatanın bir parçası olarak döndürülen hata kodları
biometricPromptResult.authenticationError.errorCode
aynı hata kodlarıdır
örneğin, androidx.biyometrik kitaplığında
androidx.biometric.BiometricPrompt.NO_SPACE,
androidx.biometric.BiometricPrompt.UNABLE_TO_İŞLEM,
androidx.biometric.BiometricPrompt.ERROR_TIMEOUT vb. authenticationError
, kullanıcı arayüzünde gösterilebilecek errorCode
ile ilişkili bir hata mesajı da içerir.
Benzer şekilde, retrieveProviderGetCredentialRequest
sırasında meta verileri ayıklayın.
Biyometrik akışkanınızın null
olup olmadığını kontrol edin. Cevabınız evet ise kendi biyometrinizi şu şekilde yapılandırın:
kimlik doğrulama. Bu, get işleminin araçlandırılmasına benzer:
val getRequest =
PendingIntentHandler.retrieveProviderGetCredentialRequest(intent)
if (getRequest == null) {
Log.i(TAG, "request is null")
setUpFailureResponseAndFinish("Unable to extract request from intent")
return
}
// Other logic...
val biometricPromptResult = getRequest.biometricPromptResult
// Add your logic based on what needs to be done
// after getting biometrics
if (biometricPromptResult == null)
{
// Do your own authentication flow, if necessary
} else if (biometricPromptResult.isSuccessful) {
Log.i(TAG, "The response from the biometricPromptResult was ${biometricPromptResult.authenticationResult.authenticationType}")
validatePasskey(
publicKeyRequest.requestJson,
origin,
packageName,
uid,
passkey.username,
credId,
privateKey
)
} else {
val error = biometricPromptResult.authenitcationError
// Process the error
}
// Other logic...