שמירה על עקביות של פרטי הכניסה עם ספקי פרטי הכניסה

כשמשתמש יוצר מפתח גישה, השרת של הצד המסתמך שומר פרטים מסוימים, וספק האישורים, כמו מנהל הסיסמאות של Google, שומר פרטים אחרים. פרטים נוספים:

  • שרת הצד המסתמך שומר את פרטי הכניסה של המפתח הציבורי.
  • ספק האישורים שומר את שם המשתמש, השם המוצג, המפתח הפרטי ומטא-נתונים משויכים אחרים. המטא-נתונים האלה עוזרים למשתמשים לזהות ולבחור את מפתח הגישה הנדרש במהלך הכניסה.

חוסר עקביות פוטנציאלי בין הנתונים שנשמרו בשרת של הצד המסתמך לבין ספק האישורים עלול להוביל לחוויית משתמש גרועה. יכולות להתעורר בעיות בתרחישים הבאים:

  • פרטי הכניסה נמחקים בשרת של הצד המסתמך, אבל לא בספק פרטי הכניסה. כתוצאה מכך, ספק פרטי הכניסה מציג למשתמש את פרטי הכניסה שנמחקו.
  • שם משתמש או שם לתצוגה עודכן בשרת של הצד המסתמך, אבל לא בספק פרטי הכניסה, ולכן ספק פרטי הכניסה מציג את הפרטים המיושנים.

Signal API של Credential Manager מאפשר לצדדים מסתמכים לתקשר עם ספקי פרטי הכניסה כדי למחוק פרטי כניסה ולעדכן מטא-נתונים של משתמשים, כמו שם המשתמש והשם המוצג. יש שלושה סוגים נתמכים של בקשות לתרחישים שונים:

  • SignalUnknownCredentialRequest

    • מציין שפרטי כניסה ספציפיים לא תקפים יותר וצריך להסתיר אותם מספק פרטי הכניסה או להסיר אותם ממנו.
  • SignalAllAcceptedCredentialIdsRequest

    • מספק רשימה של מזהי פרטי כניסה קבילים לספק פרטי הכניסה.
  • SignalCurrentUserDetailsRequest

    • עדכון פרטי המטא-נתונים של המשתמש.

תאימות גרסאות

‫Signal API זמין במכשירים עם Android 15 ומעלה, החל מגרסה 1.6.0-beta03 של הספרייה androidx.credentials.

הטמעה

כדי להשתמש ב-Signal API, צריך לבצע את השלבים הבאים:

  1. מוסיפים את התלות של Credential Manager לפרויקט.

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.7.0-alpha01")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.7.0-alpha01"
    }

  2. שליחת קריאה ל-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, מבצעים את הפעולות הבאות:

  1. מתקינים את דוגמת ספק פרטי הכניסה שנקראת MyVault.

  2. מפעילים את MyVault כספק אישורים בהגדרות > סיסמאות, מפתחות גישה וחשבונות > השירות המועדף.

    תפריט השירות המועדף בהגדרות Android, שבו MyVault מופעל כספק פרטי כניסה.

  3. מפעילים את כל ההתראות של MyVault בהגדרות > אפליקציות > MyVault > התראות.

    תפריט ההתראות באפליקציית MyVault, שבו מוצגות כל ההתראות המופעלות.

  4. מוודאים שההגדרה הצגת התראות בחלק העליון של המסך מופעלת בהתראות בהגדרות > אפליקציות > MyVault > התראות > קטגוריות > ערוץ ההתראות של Signal API.

    הגדרות ערוץ ההתראות של Signal API ב-MyVault, שבהן האפשרות &#39;הצגת ההתראה במסך&#39; מופעלת.

  5. באפליקציה, מפעילים את התהליכים ששולחים את בקשות האותות לספק האישורים. ההתראות מ'הכספת שלי' אמורות להופיע במסך. כך מוודאים שספק האישורים קיבל את הבקשות.