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

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

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

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