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

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

ממשק API של Domain Hint

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

בעזרת Domain Hint API, גורמים מוגבלים יכולים לציין מאפיין domainHint בקריאת API של FedCM כדי להציג רק חשבונות שתואמים למשתמש. ה-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.