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

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

Domain Hint API

אפשר להשתמש ב-FedCM כדי להקל על המשתמשים להתחבר לגורם נסמך (RP, הפניה לאתר) באמצעות פרטי חשבון שמסופקים על ידי ספק זהויות (IdP). עם זאת, יש מקרים שבהם ה-RP כבר יודע שרק חשבונות שמשויכים לדומיין מסוים מורשים להתחבר לאתר. המצב הזה נפוץ במיוחד בתרחישים ארגוניים שבהם הגישה לאתר מוגבלת לדומיין ארגוני. כדי לספק חוויית משתמש טובה יותר, ממשק FedCM API מאפשר ל-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 האלה עונים על שאלות שונות. המטרה של Login Hint API היא לענות על השאלה "איזה מזהה של המשתמש הרצוי?", והכוונה של Domain Hint היא לענות על השאלה "לאיזו תאגיד או שרת צריכים להשתייך החשבון?".

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

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

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