ב-Android 15, 'מנהל פרטי הכניסה' תומך בתהליך של הקשה אחת ליצירה ולאחזור של פרטי הכניסה. בתהליך הזה, המידע של פרטי הכניסה הוא מוצגים או נמצאים בשימוש ישירות בהנחיה הביומטרית, עם נקודת כניסה לאפשרויות נוספות. התהליך הפשוט הזה יוצר תהליך יצירה ואחזור יעיל ויעיל של פרטי כניסה.
דרישות:
- המידע הביומטרי הוגדר במכשיר של המשתמש, והמשתמש מאפשר לו: לבצע אימות באפליקציות.
- לתהליכי כניסה, התכונה הזו מופעלת רק בתרחישים של חשבון יחיד, גם אם יש כמה פרטי כניסה (כמו מפתח גישה וסיסמה) לחשבון הזה.
הפעלת הקשה אחת בתהליכי יצירת מפתחות הגישה
שלבי היצירה של השיטה הזו תואמים לתהליך הקיים ליצירת פרטי כניסה. בתוך BeginCreatePublicKeyCredentialRequest
, משתמשים
handleCreatePasskeyQuery()
כדי לעבד את הבקשה אם מדובר במפתח גישה.
is BeginCreatePublicKeyCredentialRequest -> {
Log.i(TAG, "Request is passkey type")
return handleCreatePasskeyQuery(request, passwordCount, passkeyCount)
}
בקובץ handleCreatePasskeyQuery()
, כוללים את BiometricPromptData
עם הכיתה CreateEntry
:
val createEntry = CreateEntry(
// Additional properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
ספקי פרטי הכניסה צריכים להגדיר במפורש את המאפיין allowedAuthenticator
במופע BiometricPromptData
. אם המאפיין הזה לא מוגדר, הערך
ברירת המחדל היא DEVICE_WEAK
. מגדירים את המאפיין האופציונלי cryptoObject
לפי הצורך בתרחיש לדוגמה.
הפעלת תהליכי מפתח גישה לכניסה באמצעות הקשה אחת
בדומה לתהליך יצירת מפתח הגישה, התהליך הזה יתבצע בהתאם להגדרה הקיימת לטיפול בכניסה של משתמשים. מתחת לBeginGetPublicKeyCredentialOption
, משתמשים
populatePasskeyData()
כדי לאסוף את המידע הרלוונטי על
בקשת אימות:
is BeginGetPublicKeyCredentialOption -> {
// ... other logic
populatePasskeyData(
origin,
option,
responseBuilder,
autoSelectEnabled,
allowedAuthenticator
)
// ... other logic as needed
}
בדומה ל-CreateEntry
, מופע של BiometricPromptData
מוגדר
מופע PublicKeyCredentialEntry
. אם לא מגדירים במפורש,
ברירת המחדל של allowedAuthenticator
היא BIOMETRIC_WEAK
.
PublicKeyCredentialEntry(
// other properties...
biometricPromptData = BiometricPromptData(
allowedAuthenticators = allowedAuthenticator
)
)
טיפול בבחירת פרטי הכניסה להזנה
בזמ�� הטיפול בבחירת רשומת פרטי הכניסה לצורך יצירת מפתח גישה, או
בחירת מפתח גישה במהלך הכניסה, קריאה ל-PendingIntentHandler's
retrieveProviderCreateCredentialRequest
, או
retrieveProviderGetCredentialRequest
, לפי הצורך. הפונקציות האלה מחזירות אובייקטים שמכילים את המטא-נתונים הנדרשים לספק. לדוגמה, כשמפעילים את הבחירה של רשומה ליצירת מפתח גישה, צריך לעדכן את הקוד באופן הבא:
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...
}
בדוגמה הזו מוצג מידע על הצלחת התהליך הביומטרי. הוא מכיל גם מידע נוסף על פרטי הכניסה. אם התהליך נכשל, משתמשים ברכיב
קוד שגיאה מתחת ל-biometricPromptResult.authenticationError
כדי לקבל החלטות.
קודי השגיאה שהוחזרו כחלק מ
biometricPromptResult.authenticationError.errorCode
הם אותם קודי שגיאה
מוגדרת בספרייה androidx.biometric, כמו
androidx.biometric.BiometricPrompt.NO_SPACE,
androidx.biometric.BiometricPrompt.UNABLE_TO_Process,
androidx.biometric.BiometricPrompt.ERROR_TIMEOUT וכדומה. הערך של authenticationError
יכלול גם הודעת שגיאה שמשויכת ל-errorCode
, שניתן להציג בממשק המשתמש.
באופן דומה, אפשר לחלץ מטא-נתונים במהלך retrieveProviderGetCredentialRequest
.
יש לבדוק אם הנתיב הביומטרי שלך הוא null
. אם כן, מגדירים את הזיהוי הביומטרי של��ם לאימות. אופן הביצוע של פעולת get דומה לזו:
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...