כשמשתמש יוצר מפתח גישה, השרת של הצד המסתמך שומר פרטים מסוימים, וספק האישורים, כמו מנהל הסיסמאות של 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.6.0-rc01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
שליחת קריאה ל-Signal API
כדי לשלוח בקשת אות לספק האישורים, צריך להשתמש בבקשת אות נתמכת. כל אחד מסוגי בקשות האותות דורש בקשת JSON, כמו בדוגמאות הבאות:
פרטי כניסה לא ידועים (
SignalUnknownCredentialRequest)משתמשים בערך
SignalUnknownCredentialRequestכדי לציין שפרטי הכניסה נדחו ונחשבים ללא ידועים. כשספק פרטי הכניסה מקבל את האות הזה, הוא מסתיר או מוחק את פרטי הכניסה.שימוש
האות הזה משמש כשהצד המסתמך לא מצליח לאמת הצהרה של מפתח גישה. המשמעות היא שמפתח הגישה לא תקין וספק פרטי הכניסה צריך להסתיר אותו או להסיר אותו.
פרמטרי ה-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 אמורות להופיע במסך. כך מוודאים שספק האישורים קיבל את הבקשות.