تنفيذ حلّ للتحقّق من الهوية باستخدام FedCM من جهة "الطرف الموثوق به"

على الأطراف المعتمِدة (RP) إكمال الخطوات التالية لتفعيل FedCM على مواقعها الإلكترونية:

استدعاء واجهة برمجة التطبيقات FedCM API على الجهة المعتمِدة

بعد توفّر إعدادات موفِّر الهوية ونقاط النهاية، يمكن لأطراف الاعتماد استدعاء navigator.credentials.get() لطلب السماح للمستخدم بتسجيل الدخول إلى طرف الاعتماد باستخدام موفِّر الهوية.

قبل استدعاء واجهة برمجة التطبيقات، عليك التأكّد من توفّر FedCM على متصفّح المستخدم. للتأكّد من توفّر FedCM، ضع هذا الرمز حول عملية تنفيذ FedCM:

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

للسماح للمستخدم بتسجيل الدخول إلى موفِّر الهوية على الطرف المعتمَد باستخدام FedCM، يمكن للطرف المعتمَد استدعاء navigator.credentials.get(). اعتبارًا من الإصدار 136 من Chrome، يمكن أن يعرض الطرف المعتمد عدة موفّري هوية من خلال تحديد مصفوفة من موفّري الهوية المتعددين في طلب 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
    }

جرِّب ميزة موفِّري الهوية المتعدّدين من خلال تسجيل الدخول باستخدام IdP1 وIdP2.

سمة السياق

باستخدام السمة الاختيارية context، يمكن لموفّر الخدمة تعديل السلسلة في واجهة مستخدم مربّع الحوار FedCM (على سبيل المثال، "تسجيل الدخول إلى rp.example…" أو "استخدام idp.example…") لاستيعاب سياقات المصادقة المحدّدة مسبقًا، مثلاً. يمكن أن تتضمّن السمة context القيم التالية:

  • signin (تلقائي)
  • signup
  • use
مخطّط بياني يوضّح عناصر واجهة المستخدم في مربّع حوار FedCM: في أعلى اليمين، يظهر رمز. على يسار الرمز، يظهر مكوّن سياق يعرض الرسالة "تسجيل الدخول إلى RP باستخدام IdP". في أسفل الصفحة، يظهر زر "متابعة" بنص ولون خلفية مخصّصَين.
كيفية تطبيق الهوية البصرية على مربّع حوار FedCM

على سبيل المثال، سيؤدي ضبط context على use إلى ظهور الرسالة التالية:

مربّع حوار FedCM يعرض رسالة سياقية مخصّصة: بدلاً من "تسجيل الدخول" باستخدام FedCM، تقول الرسالة السياقية "استخدام" FedCM.
مربّع حوار FedCM يعرض رسالة سياقية مخصّصة.

يتعامل المتصفّح مع حالات استخدام التسجيل وتسجيل الدخول بشكل مختلف استنادًا إلى ما إذا كان approved_clients متوفّرًا في الردّ من نقطة نهاية قائمة الحسابات. لن يعرض المتصفّح نص إفصاح "للمتابعة مع ...." إذا كان المستخدم قد اشترك في "منصة إعادة الشراء" من قبل.

تتلقّى السمة providers صفيفة من عناصر IdentityProvider التي تتضمّن السمات التالية:

سمة "مقدّمو الخدمة"

تتلقّى السمة providers صفيفة من عناصر IdentityProvider التي تتضمّن السمات التالية:

الموقع الوصف
configURL (مطلوب) المسار الكامل لملف إعداد موفِّر الهوية
clientId (مطلوب) معرّف العميل الخاص بطرف الاعتماد، والذي يقدّمه موفّر الهوية.
loginHint (اختياري) من خلال تحديد إحدى قيم login_hints التي توفّرها نقاط نهاية الحسابات، يعرض مربّع حوار FedCM الحساب المحدّد بشكل انتقائي.
domainHint (اختياري) من خلال تحديد إحدى قيم domain_hints التي توفّرها نقاط نهاية الحسابات، يعرض مربّع حوار FedCM الحساب المحدّد بشكل انتقائي.
mode (اختياري) سلسلة تحدّد وضع واجهة المستخدم في FedCM. يمكن أن تكون إحدى القيم التالية:
  • "active": يجب أن يتم بدء طلب FedCM من خلال تفاعل المستخدم (مثل النقر على زر).
  • "passive": سيتم بدء طلب FedCM بدون تفاعل مباشر من المستخدم.
يمكنك الاطّلاع على صفحة النظرة العامة لمعرفة المزيد عن الفرق بين الوضعَين النشط وغير النشط.

ملاحظة: تتوفّر المَعلمة mode بدءًا من الإصدار 132 من Chrome.
fields (اختياري) مصفوفة من السلاسل تحدّد معلومات المستخدم التي يحتاج الطرف المعتمد إلى أن يشاركها معه موفّر الهوية. يمكن تحديد الحقول التالية بشكل اختياري:
  • "name"
  • "username"
  • "email"
  • "tel"
  • "picture"
ملاحظة: تتوافق Fields API مع الإصدار 132 من Chrome والإصدارات الأحدث. يتوفّر الحقلان "username" و"tel" بدءًا من الإصدار 141 من Chrome.
params (اختياري) عنصر مخصّص يتيح تحديد معلَمات إضافية للمفتاح والقيمة:
  • scope: قيمة سلسلة تتضمّن أذونات إضافية يحتاج "شريك المنصة" إلى طلبها، مثل "drive.readonly calendar.readonly"
  • nonce: سلسلة عشوائية لضمان إصدار الردّ لهذا الطلب المحدّد. يمنع هجمات إعادة الإرسال.
  • مَعلمات أخرى مخصّصة للمفاتيح والقيم

ملاحظة: تتوفّر params بدءًا من الإصدار 132 من Chrome.

وضع النشاط

تتيح واجهة برمجة التطبيقات FedCM API إعدادات مختلفة لوضع تجربة المستخدم. الوضع السلبي هو الوضع التلقائي، ولا يحتاج المطوّرون إلى ضبطه.

لاستخدام FedCM في الوضع النشط، اتّبِع الخطوات التالية:

  1. تحقَّق من توفّر الميزة في متصفّح المستخدم.
  2. استدعِ واجهة برمجة التطبيقات باستخدام إيماءة مستخدم مؤقتة، مثل النقر على زر.
  3. مرِّر المَعلمة mode إلى طلب البيانات من واجهة برمجة التطبيقات:
  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'
      }
    });
  }

جرِّب "الوضع النشط" من خلال هذا العرض التوضيحي.

رمز مخصّص في وضع النشاط

يتيح الوضع النشط لموفّري خدمات تحديد الهوية تضمين رمز شعار الجهة الاعتمادية الرسمي مباشرةً في استجابة نقطة نهاية البيانات الوصفية للعميل. على الشريك الترويجي تقديم بيانات علامته التجارية مسبقًا.

استدعاء 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

باستخدام Login Hint، يمكن لطرف الاعتماد اقتراح الحساب الذي يجب أن يسجّل المستخدم الدخول باستخدامه. يمكن أن يكون ذلك مفيدًا لإعادة مصادقة المستخدمين الذين لا يتذكرون الحساب الذي استخدموه من قبل.

يمكن أن تعرض منصات الشركاء حسابًا معيّنًا بشكلٍ انتقائي من خلال استدعاء 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 طلب تسجيل دخول، ما يتيح للمستخدم تسجيل الدخول إلى حساب موفّر هوية يتطابق مع التلميح الذي طلبه الطرف المعتمِد. عندما ينقر المستخدم على الطلب، يتم فتح نافذة حوار تتضمّن عنوان URL لتسجيل الدخول المحدّد في ملف الإعداد. بعد ذلك، تتم إضافة تلميح تسجيل الدخول ومعلَمات طلب البحث الخاصة بتلميح النطاق إلى الرابط.

واجهة برمجة التطبيقات Domain Hint API

يمكن أن تعرض "المنصات الشريكة" بشكلٍ انتقائي الحسابات المرتبطة بنطاق معيّن فقط. ويمكن أن يكون ذلك مفيدًا لشركاء الترويج الذين يقتصرون على نطاق تابع لشركة.

لعرض حسابات نطاق محدّد فقط، يجب أن يستدعي 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 طلب تسجيل دخول، ما يتيح للمستخدم تسجيل الدخول إلى حساب موفّر هوية يتطابق مع التلميح الذي طلبه الطرف المعتمِد. عندما ينقر المستخدم على الطلب، يتم فتح نافذة حوار تتضمّن عنوان URL لتسجيل الدخول المحدّد في ملف الإعداد. بعد ذلك، تتم إضافة تلميح تسجيل الدخول ومعلَمات طلب البحث الخاصة بتلميح النطاق إلى الرابط.

مثال على طلب تسجيل الدخول عندما لا تتطابق أي حسابات مع domainHint
مثال على طلب تسجيل الدخول عندما لا تتطابق أي حسابات مع domainHint

يمكنك الاطّلاع على العرض التوضيحي لمزيد من التفاصيل.

المعلمات المخصّصة

تتيح ميزة "المَعلمات المخصّصة" لـ "شريك التزويد" تقديم مَعلمات إضافية على شكل مفتاح وقيمة إلى نقطة نهاية تأكيد المعرّف. باستخدام Parameters 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 إلى موفّر الهوية مع مَعلمات ككائن واحد متسلسل بتنسيق 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 إذا اختار المستخدم التسجيل. إذا لم تتضمّن الاستجابة من نقطة نهاية الحسابات حقلًا طلبه "الطرف المعتمد"، لن يتضمّن نص الإفصاح هذا الحقل. ستتعرّف خدمة IdP على جميع الحقول المطلوبة من نقطة نهاية تأكيد الهوية وتحدّد ما إذا كان عليها الحصول على إذن إضافي من المستخدم للمتابعة.

مربّع حوار FedCM يتضمّن نص واجهة المستخدم الخاص بالإفصاح التالي: &quot;للمتابعة، سيشارك fedcm-idp-demo.localhost اسم المستخدم ورقم الهاتف مع هذا الموقع الإلكتروني&quot;.
رسالة الإفصاح: يطلب الطرف المعتمد من موفِّر الهوية مشاركة اسم المستخدم ورقم الهاتف فقط.

لاستخدام ميزة "الحقول"، يجب أن يضيف RP مصفوفة fields في طلب navigator.credentials.get(). يمكن أن تحتوي الحقول على سمات مثل name أو email أو tel أو username أو picture. ويمكن توسيع نطاق هذه القيم لتشمل المزيد في المستقبل. سيبدو الطلب الذي يتضمّن fields على النحو التالي:

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

سيترجم المتصفّح تلقائيًا هذا الطلب إلى طلب HTTP إلى نقطة نهاية تأكيد الهوية التي تتضمّن المَعلمة fields التي حدّدها الطرف المعتمِد، مع الحقول التي كشف عنها المتصفّح للمستخدم في المَعلمة disclosure_shown_for. لضمان التوافق مع الإصدارات القديمة، سيرسل المتصفّح أيضًا disclosure_text_shown=true إذا تم عرض نص الإفصاح وكانت الحقول المطلوبة تتضمّن جميع الحقول الثلاثة: 'name' و'email' و'picture'. بدءًا من الإصدار 141 من Chrome، لا تشير قيمة disclosure_text_shown إلى ما إذا كان نص الإفصاح قد تم عرضه للمستخدم فعلاً.

  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 عبارة عن مصفوفة فارغة، سيتخطّى وكيل المستخدم واجهة مستخدم الإفصاح.

مربّع حوار في &quot;الوضع غير النشط&quot; لواجهة FedCM لا يعرض رسالة واجهة مستخدم للإفصاح.
لا يتم عرض رسالة بيان الإفصاح في الوضع السلبي. في مسار الأزرار، يتم تخطّي واجهة مستخدم الإفصاح بالكامل.

ويحدث ذلك حتى إذا لم تتضمّن الاستجابة من نقطة نهاية الحسابات رقم تعريف عميل مطابقًا لـ RP في approved_clients.

في هذه الحالة، تكون قيمة disclosure_text_shown المُرسَلة إلى نقطة نهاية تأكيد المعرّف هي "خطأ" في نص 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 إشعارًا إلى المستخدم من خلال عرض واجهة مستخدم المتصفّح مع معلومات الخطأ التي يقدّمها موفّر الهوية.

مربّع حوار FedCM يعرض رسالة الخطأ بعد فشل محاولة تسجيل الدخول التي أجراها المستخدم السلسلة مرتبطة بنوع الخطأ.
مربّع حوار 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)، تصبح هذه التجربة مرهقة بلا داعٍ بعد أن يمرّ بها المستخدم مرة واحدة: بعد أن يمنح المستخدم الإذن بالسماح بالتواصل بين الطرف الاعتماد وموفّر الهوية، لن يكون هناك أي فائدة تتعلق بالخصوصية أو الأمان من فرض تأكيد آخر صريح من المستخدم على أمر سبق له الموافقة عليه.

باستخدام ميزة إعادة المصادقة التلقائية، يغيّر المتصفّح سلوكه استنادًا إلى الخيار الذي تحدّده للسمة 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 API للاستخدام. على سبيل المثال، لم يسبق للمستخدم إيقاف FedCM على مستوى العالم أو لم يسبق له إيقافه لمقدّم الخدمة في الإعدادات.
  • استخدم المستخدِم حسابًا واحدًا فقط مع واجهة برمجة التطبيقات FedCM لتسجيل الدخول إلى الموقع الإلكتروني على هذا المتصفّح.
  • سجّل المستخدم الدخول إلى موفِّر الهوية باستخدام هذا الحساب.
  • لم تتم إعادة المصادقة تلقائيًا خلال آخر 10 دقائق.
  • لم يطلب منك موفّر الخدمة navigator.credentials.preventSilentAccess() بعد تسجيل الدخول السابق.

عند استيفاء هذه الشروط، تبدأ محاولة إعادة مصادقة المستخدم تلقائيًا فور استدعاء واجهة برمجة التطبيقات navigator.credentials.get() في FedCM.

عندما تكون قيمة mediation: optional هي true، قد تكون ميزة إعادة المصادقة التلقائية غير متاحة لأسباب لا يعرفها سوى المتصفّح، ويمكن للطرف المعتمد التحقّق مما إذا تم تنفيذ إعادة المصادقة التلقائية من خلال فحص السمة isAutoSelected.

ويساعد ذلك في تقييم أداء واجهة برمجة التطبيقات وتحسين تجربة المستخدم وفقًا لذلك. عندما لا يتوفّر هذا الخيار، قد يُطلب من المستخدم تسجيل الدخول باستخدام وسيطة المستخدم الصريحة، وهي عبارة عن مسار يتضمّن mediation: required.

مستخدم يعيد المصادقة تلقائيًا من خلال FedCM.

فرض التوسّط باستخدام preventSilentAccess()

لن تكون تجربة المستخدم جيدة إذا تمت إعادة مصادقة المستخدمين تلقائيًا بعد تسجيل خروجهم مباشرةً. لهذا السبب، تتضمّن FedCM فترة حظر مدتها 10 دقائق بعد إعادة المصادقة تلقائيًا لمنع هذا السلوك. وهذا يعني أنّ إعادة المصادقة التلقائية تحدث مرة واحدة على الأكثر كل 10 دقائق ما لم يسجّل المستخدم الدخول مرة أخرى خلال 10 دقائق. على الجهة المعتمدة (RP) طلب navigator.credentials.preventSilentAccess() صراحةً من المتصفّح إيقاف إعادة المصادقة التلقائية عندما يسجّل المستخدم الخروج من الجهة المعتمدة صراحةً، مثلاً بالنقر على زر تسجيل الخروج.

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

يمكن للمستخدمين إيقاف ميزة إعادة المصادقة التلقائية في الإعدادات

يمكن للمستخدمين إيقاف إعادة المصادقة تلقائيًا من قائمة الإعدادات باتّباع الخطوات التالية:

  • على إصدار Chrome المخصّص لأجهزة الكمبيوتر، انقر على chrome://password-manager/settings > تسجيل الدخول تلقائيًا.
  • على متصفّح Chrome على Android، افتح الإعدادات > مدير كلمات المرور > انقر على رمز الترس في أعلى يسار الصفحة > تسجيل الدخول تلقائيًا.

من خلال إيقاف الزر، يمكن للمستخدم إيقاف سلوك إعادة المصادقة التلقائية بالكامل. يتم تخزين هذا الإعداد ومزامنته على جميع الأجهزة إذا كان المستخدم مسجّلاً الدخول إلى حساب Google على مثيل Chrome وتم تفعيل المزامنة.

إلغاء ربط موفِّر الهوية بطرف الاعتماد

إذا سبق للمستخدم تسجيل الدخول إلى الطرف المعتمِد باستخدام موفِّر الهوية من خلال 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. قد يؤدي هذا الوعد إلى حدوث استثناء للأسباب التالية:

  • لم يسجِّل المستخدم الدخول إلى الطرف المعتمَد باستخدام موفِّر الهوية من خلال FedCM.
  • يتم استدعاء واجهة برمجة التطبيقات من داخل إطار iframe بدون سياسة أذونات FedCM.
  • عنوان URL الخاص بالإعدادات غير صالح أو لا يتضمّن نقطة نهاية قطع الاتصال.
  • فشل التحقّق من "سياسة أمان المحتوى" (CSP).
  • هناك طلب فصل في انتظار المراجعة.
  • أوقف المستخدم FedCM في إعدادات المتصفّح.

عندما تعرض نقطة نهاية قطع الاتصال الخاصة بموفّر خدمة تحديد الهوية استجابة، يتم قطع الاتصال بين الطرف المعتمد وموفّر خدمة تحديد الهوية على المتصفّح ويتم تنفيذ الوعد. يتم تحديد أرقام تعريف الحسابات التي تم إلغاء ربطها في الردّ من نقطة نهاية إلغاء الربط.