כשמשתמש יוצר מפתח גישה, השרת של הצד המסתמך שומר פרטים מסוימים, וספק פרטי הכניסה, כמו מנהל הסיסמאות של Google, שומר פרטים אחרים. פרטים נוספים:
- השרת של הגורם המסתמך שומר את פרטי הכניסה של המפתח הציבורי.
- ספק פרטי הכניסה שומר את שם המשתמש, השם המוצג, המפתח הפרטי ומטא-נתונים משויכים אחרים. המטא-נתונים האלה עוזרים למשתמשים לזהות ולבחור את מפתח הגישה הנדרש במהלך הכניסה.
חוסר עקביות אפשרי בין הנתונים שנשמרו בשרת של הצד המסתמך לבין ספק פרטי הכניסה עלול להוביל לחוויית משתמש גרועה. בעיות יכולות לקרות בתרחישים הבאים:
- פרטי כניסה נמחקים בשרת של הצד המסתמך אבל לא אצל ספק פרטי הכניסה, וכתוצאה מכך ספק פרטי הכניסה מציג למשתמש את פרטי הכניסה שנמחקו.
- שם משתמש או שם לתצוגה מתעדכן בשרת של הצד המסתמך, אבל לא בספק פרטי הכניסה, ולכן ספק פרטי הכניסה מציג את הפרטים המיושנים.
Signal API של Credential Manager מאפשר לצדדים המסתמכים לתקשר עם ספקי פרטי הכניסה כדי למחוק פרטי כניסה ולעדכן את המטא-נתונים של המשתמש, כמו שם המשתמש והשם המוצג. יש שלושה סוגי בקשות נתמכים לתרחישים שונים:
SignalUnknownCredentialRequest- מציין שפרטי כניסה ספציפיים כבר לא תקפים וצריך להסתיר או להסיר אותם מספק פרטי הכניסה.
SignalAllAcceptedCredentialIdsRequest- מספקת לספק פרטי הכניסה רשימה של מזהי פרטי כניסה מקובלים.
SignalCurrentUserDetailsRequest- מעדכנת את פרטי המטא-נתונים של המשתמש.
תאימות בין גרסאות
Signal API זמין במכשירים עם Android מגרסה 15 ואילך, החל מגרסה 1.6.0-beta03 של הספרייה androidx.credentials.
הטמעה
כדי להשתמש ב-Signal API:
מוסיפים לפרויקט את התלות של Credential Manager.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" }
שליחת קריאה ל-Signal API
כדי לשלוח בקשת אות לספק פרטי הכניסה, משתמשים בבקשת אות נתמכת. לכל אחד מסוגי הבקשות של האותות נדרשת בקשת JSON, כמו בדוגמאות הבאות:
פרטי כניסה לא ידועים (
SignalUnknownCredentialRequest)משתמשים ב-
SignalUnknownCredentialRequestכדי לציין שפרטי הכניסה נדחו ונחשבים לא ידועים. כשספק פרטי הכניסה מקבל את האות הזה, הוא מסתיר או מוחק את פרטי הכניסה.שימוש
השתמשו באות הזה כשהצד המסתמך לא מצליח לאמת טענת נכוֹנוּת (assertion) של מפתח גישה. זה אומר שמפתח הגישה לא תקין, וספק פרטי הכניסה צריך להסתיר או להסיר אותו.
פרמטרי ה-JSON שנדרשים לבקשה הזו הם
rpIdו-credentialId. מידע נוסף על מבנה ה-JSON מופיע בקטע אפשרויות של signalUnknownCredential.credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )כל פרטי הכניסה שאושרו (
SignalAllAcceptedCredentialIdsRequest)משתמשים ב-
SignalAllAcceptedCredentialIdsRequestכדי להודיע לספקי פרטי הכניסה על קבוצת פרטי הכניסה שהתקבלו. אחרי שספק פרטי הכניסה מקבל את האות, הוא מסתיר או מוחק את כל פרטי הכניסה שלא נכללים ברשימה הזו, או מבטל את ההסתרה של פרטי כניסה שהוסתרו בעבר ועכשיו נכללים ברשימה.שימוש
השתמשו באות הזה כשהאימות באמצעות מפתח גישה נכשל על ידי הצד המסתמך. השגיאה הזו מציינת שמפתח הגישה לא תקין, וספק פרטי הכניסה צריך להסתיר או להסיר אותו. אתם יכולים להשתמש באות הזה גם בכל פעם שאתם צריכים לשדר את קבוצת מזהי פרטי הכניסה הידועים לספקי פרטי הכניסה.
הפרמטרים הנדרשים של JSON לבקשה הזו הם
rpId,userIdו-allAcceptedCredentialIds. מידע נוסף על מבנה ה-JSON זמין בקטע אפשרויות signalAllAcceptedCredential.credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )פרטי המשתמש הנוכחי (
SignalCurrentUserDetailsRequest)אפשר להשתמש ב-
SignalCurrentUserDetailsRequestכדי להודיע לספקי פרטי הכניסה שהמטא-נתונים, כמו שם המשתמש והשם המוצג של משתמש מסוים, עודכנו וצריכים להופיע אצל ספק פרטי הכניסה.שימוש
השתמשו באות הזה כשהמשתמש או הצד המסתמך מעדכנים את המטא-נתונים של מפתח הגישה שמשויכים לחשבון המשתמש.
הפרמטרים הנדרשים של JSON לבקשה הזו הם
rpId,userId,nameו-displayName. מידע נוסף על מבנה ה-JSON זמין בקטע אפשרויות של signalCurrentUserDetails.credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
בדיקת ההטמעה
כדי לבדוק את ההטמעה של Signal API:
מתקינים את הדוגמה של ספק פרטי הכניסה שנקראת MyVault.
מפעילים את MyVault כספק פרטי כניסה בהגדרות > סיסמאות, מפתחות גישה וחשבונות > השירות המועדף.
מפעילים את כל ההתראות של MyVault בהגדרות > אפליקציות > MyVault > התראות.
מוודאים שהאפשרות הקפצה במסך מופעלת להתראות בהגדרות > אפליקציות > MyVault > התראות > קטגוריות > ערוץ התראות של Signal API.
באפליקציה, מפעילים את התהליכים ששולחים את בקשות האותות לספק פרטי הכניסה. ההתראות מ-MyVault אמורות להופיע במסך. כך אפשר לוודא שספק פרטי הכניסה קיבל את הבקשות.