אפשר להשתמש באימות פרטי כניסה דיגיטליים באפליקציות ל-Android כדי לאמת את הזהות של משתמש (למשל, תעודה מזהה רשמית), מאפיינים של המשתמש (למשל, רישיון נהיגה, תואר אקדמי או מאפיינים כמו גיל או כתובת) או בתרחישים אחרים שבהם צריך להנפיק ולאמת פרטי כניסה כדי לאמת את האותנטיות של ישות.
פרטי כניסה דיגיטליים הם תקן ציבורי של W3C שמציין איך לגשת לפרטי הכניסה הדיגיטליים המאומתים של משתמש מארנק דיגיטלי. התרחישים לדוגמה באינטרנט מיושמים באמצעות W3C Credential Management API. ב-Android, משתמשים ב-API של DigitalCredential
של Credential Manager כדי לאמת פרטי כניסה דיגיטליים.
הטמעה
כדי לאמת את פרטי הכניסה הדיגיטליים בפרויקט Android:
- מוסיפים יחסי תלות לסקריפט ה-build של האפליקציה ומאתחלים את הכיתה
CredentialManager
. - יוצרים בקשה לפרטי כניסה דיגיטליים ומשתמשים בה כדי לאתחל את
DigitalCredentialOption
, ולאחר מכן יוצרים אתGetCredentialRequest
. - מריצים את התהליך
getCredential
עם הבקשה שנוצרה כדי לקבלGetCredentialResponse
תקין או מטפלים בחריגות שעשויות להתרחש. אחרי שהאחזור מסתיים בהצלחה, מאמתים את התשובה.
הוספת יחסי תלות והפעלה
מוסיפים את יחסי התלות הבאים לסקריפט ה-build של Gradle:
dependencies {
implementation("androidx.credentials:credentials:1.5.0-beta01")
implementation("androidx.credentials:credentials-play-services-auth:1.5.0-beta01")
}
בשלב הבא, מאתחלים מופע של הכיתה CredentialManager
.
val credentialManager = CredentialManager.create(context)
יצירה של בקשה לפרטי כניסה דיגיטליים
יוצרים בקשה לפרטי כניסה דיגיטליים ומשתמשים בה כדי לאתחל DigitalCredentialOption
.
// 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)
)
אחזור פרטי הכניסה
מריצים את התהליך getCredential
עם הבקשה שנוצרה. אם הבקשה תאושר, תקבלו GetCredentialResponse
. אם הבקשה תיכשל, תקבלו GetCredentialException
.
התהליך getCredential
מפעיל תיבת דו-שיח של מערכת Android כדי להציג את אפשרויות פרטי הכניסה הזמינות של המשתמש ולאסוף את הבחירה שלו. לאחר מכן, באפליקציית הארנק שמכילה את פרטי הכניסה שבחרתם יוצגו ממשקי משתמש כדי לאסוף את ההסכמה ולבצע את הפעולות הנדרשות ליצירת תגובה של פרטי כניסה דיגיטליים.
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}")
}
}