הטמעת פתרון זהויות באמצעות FedCM בצד של הצד הנסמך

צדדים מסתמכים (RP) צריכים לבצע את השלבים הבאים כדי להפעיל FedCM באתר שלהם:

שליחת קריאה ל-FedCM API ב-Relying Party

אחרי שההגדרות של ספק ה-IdP ונקודות הקצה שלו זמינות, צדדים מסתמכים יכולים להפעיל את navigator.credentials.get() כדי לבקש לאפשר למשתמש להיכנס לצד המסתמך באמצעות ספק ה-IdP.

לפני שקוראים ל-API, צריך לוודא שFedCM זמין בדפדפן של המשתמש. כדי לבדוק אם FedCM זמין, מוסיפים את הקוד הזה סביב ההטמעה של FedCM:

  if ('IdentityCredential' in window) {
    // If the feature is available, take action
  } else {
    // FedCM is not supported, use a different identity solution
  }

כדי לאפשר למשתמש להיכנס לספק הזהויות ב-RP באמצעות FedCM, ה-RP יכול להתקשר אל navigator.credentials.get(). החל מ-Chrome 136, ספק שירות יכול לתמוך בכמה ספקי זהויות על ידי ציון מערך של כמה ספקי זהויות בקריאה אחת של navigator.credentials.get(), לדוגמה:

  const credential = await navigator.credentials.get({
      identity: {
        // Specify the IdP (or multiple IdPs, supported from Chrome 136) this Relying Party supports
        providers: [
        {
              configURL: 'https://accounts.idp-1.example/config.json',
              clientId: '********'
        },
        {
          configURL: 'https://accounts.idp-2.example/config.json',
          clientId: '********'
        }]
      }
    },
  );
  const { token } = credential;
  
  // Get the current IdP's configURL to identify which provider the user is signed in with
  const currentIdpConfigUrl = credential.configURL;
  if (currentIdpConfigUrl === 'https://idp1.example/foo.json') {
    // handle the case where the user signed in with idp1
  } else if (currentIdpConfigUrl === 'https://idp2.example/bar.json') {
    // handle the case where the user signed in with idp2
    }

כדי לנסות את התכונה של כמה ספקי IdP, צריך להיכנס באמצעות IdP1 ו-IdP2.

מאפיין הקשר

באמצעות המאפיין האופציונלי context, ה-RP יכול לשנות את המחרוזת בממשק המשתמש של תיבת הדו-שיח של FedCM (לדוגמה, 'כניסה אל rp.example…', 'שימוש ב-idp.example…') כדי להתאים להקשרים מוגדרים מראש של אימות, למשל. המאפיין context יכול לקבל את הערכים הבאים:

  • signin (ברירת מחדל)
  • signup
  • use
תרשים שמסביר את רכיבי ממשק המשתמש של תיבת הדו-שיח של FedCM: בצד ימין למעלה מוצג סמל. משמאל לסמל מוצג רכיב הקשר עם ההודעה 'כניסה ל-RP באמצעות ספק הזהויות'. בתחתית יש לחצן 'המשך' עם טקסט וצבע רקע בהתאמה אישית.
איך המיתוג מוחל על תיבת הדו-שיח של FedCM

לדוגמה, אם מגדירים את context ל-use, תוצג ההודעה הבאה:

תיבת דו-שיח של FedCM שבה מוצגת הודעת הקשר בהתאמה אישית: במקום 'כניסה' באמצעות FedCM, הודעת ההקשר היא 'שימוש' ב-FedCM.
תיבת דו-שיח של FedCM עם הודעת הקשר מותאמת אישית.

הדפדפן מטפל בתרחישי שימוש של הרשמה וכניסה בצורה שונה, בהתאם לקיום של approved_clients בתגובה מנקודת הקצה של רשימת החשבונות. אם המשתמש כבר נרשם ל-RP, בדפדפן לא יוצג טקסט גילוי נאות "כדי להמשיך עם...".
המאפיין providers מקבל מערך של אובייקטים מסוג IdentityProvider עם המאפיינים הבאים:

מאפיין הספקים

המאפיין providers מקבל מערך של אובייקטים מסוג IdentityProvider עם המאפיינים הבאים:

נכס תיאור
configURL (חובה) נתיב מלא של קובץ התצורה של ספק הזהויות.
clientId (חובה) מזהה הלקוח של ה-RP, שהונפק על ידי ה-IdP.
ֶloginHint (אופציונלי) אם מציינים אחד מ-login_hints הערכים שמופיעים בנקודות הקצה של החשבונות, תיבת הדו-שיח של FedCM מציגה באופן סלקטיבי את החשבון שצוין.
ֶdomainHint (אופציונלי) אם מציינים אחד מ-domain_hints הערכים שמופיעים בנקודות הקצה של החשבונות, תיבת הדו-שיח של FedCM מציגה באופן סלקטיבי את החשבון שצוין.
ֶmode (אופציונלי) מחרוזת שמציינת את מצב ממשק המשתמש של FedCM. הערך יכול להיות אחד מהערכים הבאים:
  • "active": חלון ההנחיה של FedCM חייב להיות מופעל על ידי אינטראקציה של המשתמש (למשל, לחיצה על לחצן).
  • "passive": תופעל הנחיה של FedCM ללא אינטראקציה ישירה של המשתמש.
בדף הסקירה הכללית אפשר לקרוא מידע נוסף על ההבדל בין מצב פעיל למצב סביל.

הערה: הפרמטר mode נתמך מגרסה Chrome 132.
ֶfields (אופציונלי) מערך של מחרוזות שמציין את פרטי המשתמש (name,‏ email,‏ picture) שספק הזהויות צריך לשתף עם RP.
הערה: Field API נתמך ב-Chrome 132 ואילך.
ֶparams (אופציונלי) אובייקט מותאם אישית שמאפשר לציין פרמטרים נוספים של מפתח/ערך:
  • scope: ערך מחרוזת שמכיל הרשאות נוספות שספק הזהויות צריך לבקש, לדוגמה "drive.readonly calendar.readonly"
  • nonce: מחרוזת אקראית כדי לוודא שהתשובה מונפקת לבקשה הספציפית הזו. מונעת התקפות חוזרות.
  • פרמטרים מותאמים אישית אחרים של מפתח/ערך.

הערה: params נתמך מגרסה Chrome 132.

מצב פעיל

‫FedCM תומך בהגדרות שונות של מצב חוויית המשתמש. מצב פסיבי הוא מצב ברירת המחדל, ומפתחים לא צריכים להגדיר אותו.

כדי להשתמש ב-FedCM במצב פעיל:

  1. בודקים את זמינות התכונה בדפדפן של המשתמש.
  2. מפעילים את ה-API באמצעות תנועת משתמש חולפת, כמו לחיצה על כפתור.
  3. מעבירים את הפרמטר mode לקריאה ל-API:
  let supportsFedCmMode = false;
  try {
    navigator.credentials.get({
      identity: Object.defineProperty(
        // Check if this Chrome version supports the Mode API.
        {}, 'mode', {
          get: function () { supportsFedCmMode = true; }
        }
      )
    });
  } catch(e) {}

  if (supportsFedCmMode) {
    // The button mode is supported. Call the API with mode property:
    return await navigator.credentials.get({
      identity: {
        providers: [{
          configURL: 'https://idp.example/config.json',
          clientId: '123',
        }],
        // The 'mode' value defines the UX mode of FedCM.
        // - 'active': Must be initiated by user interaction (e.g., clicking a button).
        // - 'passive': Can be initiated without direct user interaction.
        mode: 'active'
      }
    });
  }

כאן אפשר לנסות את המצב הפעיל.

סמל מותאם אישית במצב פעיל

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

קריאה ל-FedCM מתוך iframe חוצה-מקורות

אפשר להפעיל את FedCM מתוך iframe חוצה מקור באמצעות מדיניות הרשאות identity-credentials-get, אם מסגרת ההורה מאפשרת זאת. כדי לעשות זאת, מוסיפים את המאפיין allow="identity-credentials-get" לתג ה-iframe באופן הבא:

  <iframe src="https://fedcm-cross-origin-iframe.glitch.me" allow="identity-credentials-get"></iframe>

דוגמה

אופציונלי: אם הפריים הראשי רוצה להגביל את המקורות לקריאה ל-FedCM, הוא צריך לשלוח כותרת Permissions-Policy עם רשימה של מקורות מורשים.

  Permissions-Policy: identity-credentials-get=(self "https://fedcm-cross-origin-iframe.glitch.me")

מידע נוסף על אופן הפעולה של מדיניות ההרשאות זמין במאמר שליטה בתכונות של הדפדפן באמצעות מדיניות ההרשאות.

Login Hint API

בעזרת רמז הכניסה, ה-RP יכול להמליץ למשתמש עם איזה חשבון כדאי לו להיכנס. האפשרות הזו יכולה לעזור למשתמשים שרוצים לבצע אימות מחדש אבל לא בטוחים באיזה חשבון הם השתמשו בעבר.

ספקי זהויות יכולים להציג חשבון ספציפי באופן סלקטיבי על ידי הפעלת navigator.credentials.get() עם המאפיין loginHint ואחד מהערכים login_hints שאוחזרו מנקודת הקצה של רשימת החשבונות, כמו שמוצג בדוגמת הקוד הבאה:

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: '123',
        // Accounts endpoint can specify a 'login_hints' array for an account.
        // When RP specifies a 'exampleHint' value, only those accounts will be
        // shown to the user whose 'login_hints' array contains the 'exampleHint'
        // value
        loginHint : 'exampleHint'
      }]
    }
  });

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

Domain Hint API

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

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

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: 'abc',
        // Accounts endpoint can specify a 'domain_hints' array for an account.
        // When RP specifies a '@domain.example' value, only those accounts will be
        // shown to the user whose 'domain_hints' array contains the
        // '@domain.example' value
        domainHint : '@domain.example'
      }]
    }
  });

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

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

פרטים נוספים זמינים בהדגמה.

פרמטרים מותאמים אישית

התכונה 'פרמטרים מותאמים אישית' מאפשרת לספק פרמטרים נוספים של צמדי מפתח/ערך לנקודת הקצה של הצהרת הזהות. בעזרת Parameters API, ספקי RP יכולים להעביר פרמטרים נוספים לספק ה-IdP כדי לבקש הרשאות למשאבים מעבר לכניסה בסיסית. העברת פרמטרים נוספים יכולה להיות שימושית בתרחישים הבאים:

  • ספק ה-RP צריך לבקש באופן דינמי הרשאות נוספות שיש לספק ה-IdP, כמו גישה לכתובת לחיוב או ליומן. המשתמש יכול לאשר את ההרשאות האלה באמצעות תהליך UX מבוקר על ידי IdP שמופעל באמצעות התכונה 'המשך', ואז ה-IdP ישתף את המידע הזה.

כדי להשתמש ב-API, ספק הזהות מוסיף פרמטרים לנכס params כאובייקט בקריאה navigator.credentials.get():

  let {token} = await navigator.credentials.get({
    identity: {
      providers: [{
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',
        // Key/value pairs that need to be passed from the
        // RP to the IdP but that don't really play any role with
        // the browser.
        params: {
          IDP_SPECIFIC_PARAM: '1',
          foo: 'BAR'
        }
      },
    }
  });

הדפדפן יתרגם את זה אוטומטית לבקשת POST ל-IdP עם פרמטרים כאובייקט יחיד שעבר סריאליזציה ל-JSON עם קידוד כתובת URL:

  // The assertion endpoint is drawn from the config file
  POST /fedcm_assertion_endpoint HTTP/1.1
  Host: idp.example
  Origin: https://rp.example/
  Content-Type: application/x-www-form-urlencoded
  Cookie: 0x23223
  Sec-Fetch-Dest: webidentity

  // params are translated into urlencoded version of `{"IDP_SPECIFIC_PARAM":"1","foo":"bar"}`
  account_id=123&client_id=client1234&params=%22%7B%5C%22IDP_SPECIFIC_PARAM%5C%22%3A1%2C%5C%22foo%5C%22%3A%5C%22BAR%5C%22%7D%22.

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

  if (rpRequestsPermissions) {
    // Response with a URL if the RP requests additional permissions
    return res.json({
      continue_on: '/example-redirect',
    });
  }

שדות

ספק השירות יכול לציין את פרטי המשתמש (כל שילוב של שם, כתובת אימייל ותמונת פרופיל) שהוא צריך שספק הזהויות ישתף איתו. המידע המבוקש ייכלל בממשק המשתמש של הגילוי הנאות בתיבת הדו-שיח של FedCM. אם המשתמש יבחר להיכנס לחשבון, תוצג לו הודעה שלפיה idp.example ישתף את המידע המבוקש עם rp.example.

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

כדי להשתמש בתכונה Fields, צריך להוסיף מערך fields בקריאה navigator.credentials.get(). השדות יכולים להכיל כל פרמוטציה של name, email ו-picture. יכול להיות שבעתיד נרחיב את האפשרויות האלה ונוסיף עוד ערכים. בקשה עם fields תיראה כך:

  let { token } = await navigator.credentials.get({
    identity: {
      providers: [{
        // RP requests the IdP to share only user email and profile picture
        fields: [ 'email', 'picture'],
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',

      },
    }
  });

הדפדפן יתרגם את הבקשה באופן אוטומטי לבקשת HTTP לנקודת הקצה של הצהרת הזהות, שתכלול את הפרמטר fields שצוין על ידי ספק השירות, עם השדות שהדפדפן חשף למשתמש בפרמטר disclosure_shown_for. לצורך תאימות לאחור, הדפדפן ישלח גם את הערך disclosure_text_shown=true אם טקסט הגילוי הנאות הוצג והשדות המבוקשים כוללים את כל שלושת השדות: 'name',‏ 'email' ו-'picture'.

  POST /id_assertion_endpoint HTTP/1.1
  Host: idp.example
  Origin: https://rp.example/
  Content-Type: application/x-www-form-urlencoded
  Cookie: 0x23223
  Sec-Fetch-Dest: webidentity

  // The RP only requested to share email and picture. The browser will send `disclosure_text_shown=false`, as the 'name' field value is missing
  account_id=123&client_id=client1234&disclosure_text_shown=false&fields=email,picture&disclosure_shown_for=email,picture

אם fields הוא מערך ריק, סוכן המשתמש ידלג על ממשק המשתמש של הגילוי הנאות.

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

זה קורה גם אם התגובה מנקודת הקצה של החשבונות לא מכילה מזהה לקוח שתואם ל-RP ב-approved_clients.

במקרה הזה, הערך של disclosure_text_shown שנשלח אל נקודת הקצה של הצהרת הזהות הוא false בגוף ה-HTTP:

  POST /id_assertion_endpoint HTTP/1.1
  Host: idp.example
  Origin: https://rp.example/
  Content-Type: application/x-www-form-urlencoded
  Cookie: 0x23223
  Sec-Fetch-Dest: webidentity

  account_id=123&client_id=client1234&nonce=234234&disclosure_text_shown=false

הצגת הודעת שגיאה

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

A
תיבת דו-שיח של FedCM שבה מוצגת הודעת השגיאה אחרי שהניסיון של המשתמש להתחבר נכשל. המחרוזת משויכת לסוג השגיאה.
  try {
    const cred = await navigator.credentials.get({
      identity: {
        providers: [
          {
            configURL: 'https://idp.example/manifest.json',
            clientId: '1234',
          },
        ],
      }
    });
  } catch (e) {
    const code = e.code;
    const url = e.url;
  }

אימות מחדש אוטומטי של משתמשים אחרי האימות הראשוני

אימות מחדש אוטומטי באמצעות FedCM (בקיצור: auto-reauthn) מאפשר למשתמשים לבצע אימות מחדש באופן אוטומטי. התנאים הבאים צריכים להתקיים כדי שהמשתמש יאומת מחדש באופן אוטומטי:

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

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

באימות מחדש אוטומטי, ההתנהגות של הדפדפן משתנה בהתאם לאפשרות שמציינים עבור mediation כשמפעילים את navigator.credentials.get().

  const cred = await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/fedcm.json',
        clientId: '1234',
      }],
    },
    mediation: 'optional', // this is the default
  });

  // `isAutoSelected` is `true` if auto-reauthn was performed.
  const isAutoSelected = cred.isAutoSelected;

mediation הוא מאפיין ב-Credential Management API. הוא מתנהג באותו אופן כמו במקרים של PasswordCredential ו-FederatedCredential, ויש לו תמיכה חלקית גם ב-PublicKeyCredential. המאפיין מקבל את ארבעת הערכים הבאים:

  • 'optional'(ברירת מחדל): אימות מחדש אוטומטי אם אפשר, נדרשת תיווך אם לא. מומלץ לבחור באפשרות הזו בדף הכניסה.
  • 'required': תמיד נדרש תהליך גישור כדי להמשיך, למשל, לחיצה על הלחצן 'המשך' בממשק המשתמש. בוחרים באפשרות הזו אם מצפים מהמשתמשים להעניק הרשאה במפורש בכל פעם שהם צריכים לעבור אימות.
  • 'silent': אימות מחדש אוטומטי אם אפשר, או כשל שקט בלי לדרוש תהליך בחירת רשת אם אי אפשר. מומלץ לבחור באפשרות הזו בדפים שאינם דף הכניסה הייעודי, אבל שבהם רוצים שהמשתמשים יישארו מחוברים – למשל, דף פריט באתר משלוחים או דף כתבה באתר חדשות.
  • 'conditional': משמש ל-WebAuthn ולא זמין ל-FedCM בשלב הזה.

בשיחה הזו, אימות מחדש אוטומטי מתבצע בתנאים הבאים:

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

כשמתקיימים התנאים האלה, מתחיל ניסיון לאימות מחדש של המשתמש באופן אוטומטי ברגע שמפעילים את FedCM navigator.credentials.get().

כש-mediation: optional, יכול להיות שהאימות מחדש האוטומטי לא יהיה זמין בגלל סיבות שרק הדפדפן יודע עליהן. ספק השירות יכול לבדוק אם האימות מחדש האוטומטי בוצע על ידי בדיקת המאפיין isAutoSelected.

המידע הזה עוזר להעריך את הביצועים של ה-API ולשפר את חוויית המשתמש בהתאם. בנוסף, כשהאפשרות הזו לא זמינה, יכול להיות שהמשתמש יתבקש להיכנס באמצעות תהליך מפורש של תיווך משתמש, שהוא תהליך עם mediation: required.

משתמש עובר אימות מחדש באופן אוטומטי באמצעות FedCM.

החלת בחירת רשת באמצעות preventSilentAccess()

אימות מחדש אוטומטי של משתמשים מיד אחרי שהם יוצאים מהחשבון לא יספק חוויית משתמש טובה. לכן, ב-FedCM יש תקופת שקט של 10 דקות אחרי אימות מחדש אוטומטי, כדי למנוע את ההתנהגות הזו. המשמעות היא שהאימות מחדש האוטומטי מתבצע פעם אחת לכל היותר בכל 10 דקות, אלא אם המשתמש נכנס שוב לחשבון תוך 10 דקות. ספק הזהויות צריך לקרוא לפונקציה navigator.credentials.preventSilentAccess() כדי לבקש באופן מפורש מהדפדפן להשבית את האימות מחדש האוטומטי כשמשתמש יוצא מהחשבון בספק הזהויות באופן מפורש, למשל על ידי לחיצה על לחצן יציאה מהחשבון.

  function signout() {
    navigator.credentials.preventSilentAccess();
    location.href = '/signout';
  }

המשתמשים יכולים לבטל את ההסכמה לאימות מחדש אוטומטי בהגדרות

המשתמשים יכולים להשבית את האימות מחדש האוטומטי בתפריט ההגדרות:

  • ב-Chrome במחשב, עוברים אל chrome://password-manager/settings > כניסה אוטומטית.
  • ב-Chrome ל-Android, פותחים את ההגדרות > מנהל הסיסמאות > מקישים על סמל גלגל השיניים בפינה השמאלית העליונה > כניסה אוטומטית.

המשתמשים יכולים להשבית את המתג כדי לבטל את ההתנהגות של אימות מחדש אוטומטי לחלוטין. ההגדרה הזו נשמרת ומסונכרנת בין מכשירים, אם המשתמש מחובר לחשבון Google במופע Chrome והסנכרון מופעל.

ניתוק ספק הזהויות מספק השירות

אם משתמש נכנס בעבר ל-RP באמצעות ספק הזהויות דרך FedCM, הדפדפן שומר את הקשר הזה באופן מקומי כרשימה של חשבונות מקושרים. ספק ה-RP יכול ליזום ניתוק על ידי הפעלת הפונקציה IdentityCredential.disconnect(). אפשר להפעיל את הפונקציה הזו מתוך מסגרת RP ברמה העליונה. כדי לנתק את ספק הזהויות, על ספק הזהויות להעביר configURL, את clientId שבו הוא משתמש במסגרת ספק הזהויות וaccountHint. רמז לגבי החשבון יכול להיות מחרוזת שרירותית, כל עוד נקודת הקצה לניתוק יכולה לזהות את החשבון. לדוגמה, כתובת אימייל או מזהה משתמש שלא בהכרח תואמים למזהה החשבון שסופק על ידי נקודת הקצה של רשימת החשבונות:

  // Disconnect an IdP account 'account456' from the RP 'https://idp.com/'. This is invoked on the RP domain.
  IdentityCredential.disconnect({
    configURL: 'https://idp.com/config.json',
    clientId: 'rp123',
    accountHint: 'account456'
  });

הפונקציה IdentityCredential.disconnect() מחזירה Promise. יכול להיות שההבטחה הזו תזרוק חריגה מהסיבות הבאות:

  • המשתמש לא נכנס לאתר (Relying Party) באמצעות ספק הזהויות דרך FedCM.
  • הפעלת ה-API מתבצעת מתוך iframe ללא מדיניות הרשאות של FedCM.
  • הערך של configURL לא תקין או שנקודת הקצה של הניתוק חסרה.
  • בדיקת Content Security Policy‏ (CSP) נכשלת.
  • יש בקשת ניתוק בהמתנה.
  • המשתמש השבית את FedCM בהגדרות הדפדפן.

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

השלבים הבאים

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