עדכונים מ-FedCM: Domain Hint API

החל מ-Chrome 123, אפשר להשתמש ברמזים לדומיינים לצד Federated Credential Management API ‏ (FedCM). באמצעות Domain Hint API, מפתחים יכולים לספק חוויית משתמש טובה יותר על ידי הצגת חשבונות הכניסה המשולבים מהדומיין שהם מקבלים בלבד.

Domain Hint API

אפשר להשתמש ב-FedCM כדי להקל על משתמשים להתחבר לצד נסמך (RP, אתר) באמצעות פרטי חשבון שספק זהויות (IdP) מספק. עם זאת, יש מקרים שבהם ה-RP כבר יודע שרק חשבונות שמשויכים לדומיין מסוים מורשים להתחבר לאתר. המצב הזה נפוץ במיוחד בתרחישים ארגוניים שבהם הגישה לאתר מוגבלת לדומיין של הארגון. כדי לספק חוויית משתמש טובה יותר, ה-API של FedCM מאפשר ל-RP להציג רק את החשבונות שאפשר להשתמש בהם כדי להתחבר ל-RP. כך אפשר למנוע תרחישים שבהם משתמש מנסה להתחבר ל-RP באמצעות חשבון מחוץ לדומיין הארגוני, ורק מאוחר יותר מוצגת לו הודעת שגיאה (או שקט אם ההתחברות לא פעלה) כי לא נעשה שימוש בסוג החשבון הנכון.

באמצעות Domain Hint API, ספקי RP יכולים לציין מאפיין domainHint בקריאה ל-FedCM API כדי להציג רק חשבונות תואמים של המשתמש. ה-IdP יכול לספק נכס domain_hints כחלק מתגובה מנקודת הקצה של רשימת החשבונות כדי לציין לאילו דומיינים חשבון משויך. כך הדפדפן יכול להציג את החשבונות התואמים בלי לחשוף את הטיפת הדומיין המבוקשת ל-IdP.

דוגמה לתגובת JSON מנקודת הקצה של רשימת החשבונות נראית כך:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

ה-RP יכול לבצע קריאה ל-navigator.credentials.get() עם מאפיין domainHint כדי לסנן את החשבונות. לדוגמה, נניח שמשתמש נכנס לאתר corp-partner.example ומתחבר באמצעות חשבון מ-corp.example. האתר יפעיל את ה-API באופן הבא:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

הערך domainHint לא נשלח אל נקודת הקצה של רשימת החשבונות לסינון בצד השרת, כי הוא יכול לשמש כוקטור ליצירת טביעת אצבע ל-IdP. במקום זאת, Chrome מבצע בקשת FedCM כרגיל ומסנן את החשבונות שלא תואמים לערך domainHint שצוין בקריאה navigator.credentials.get(). לאחר מכן, Chrome מציג למשתמש את תיבת הדו-שיח של FedCM עם רשימת החשבונות החדשה. הגישה הזו דומה ל-Login Hint API, אבל שני ממשקי ה-API האלה נותנים תשובות לשאלות שונות. מטרת ה-API של Login Hint היא לענות על השאלה "מהו המזהה של המשתמש הרצוי?", ואילו מטרת ה-API של Domain Hint היא לענות על השאלה "לאיזה תאגיד או שרת החשבון הזה צריך להיות שייך?".

כשמשתמשים ב-domainHint: "any", Chrome מסנן חשבונות שאין להם דומיינים (כלומר, domain_hints לא מועבר או שהוא ריק). לדוגמה, אפשר להשתמש באפשרות הזו בתרחישי שימוש שבהם ה-RP מאפשר רק חשבונות מנוהלים בתהליך ההרשמה שלו.

אם אין חשבונות שתואמים ל-domainHint, בתיבת הדו-שיח של FedCM תוצג בקשה להתחברות, שמאפשרת למשתמש להתחבר לחשבון IdP שתואם לטיפת המידע שביקשה ה-RP. כשהמשתמש מקייש על ההנחיה, נפתח חלון קופץ עם כתובת ה-URL להתחברות שצוינה בקובץ התצורה. לאחר מכן, הקישור מצורף עם רמז הכניסה ופרמטרי השאילתה של רמז הדומיין.

דוגמה להודעת התחברות כשאין חשבונות שתואמים ל-domainHint.
דוגמה להודעת כניסה כשאין חשבונות שתואמים ל-domainHint.