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

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

استدعاء واجهة برمجة التطبيقات FedCM API في "الطرف الموثوق به"

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

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

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

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

سمة السياق

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

  • signin (تلقائي)
  • signup
  • use
مخطّط بياني يوضّح مكوّنات واجهة المستخدم في مربّع حوار FedCM: يظهر رمز في أعلى يمين الصفحة. على يسار الرمز، يظهر مكوّن سياق يعرض الرسالة "تسجيل الدخول إلى RP باستخدام موفِّر الهوية". في أسفل الشاشة، يظهر زر "متابعة" يتضمّن نصًا ولون خلفية مخصّصَين.
كيفية تطبيق العلامة التجارية على مربّع حوار 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 (اختياري) صفيف من السلاسل التي تحدّد معلومات المستخدم ("الاسم" و"البريد الإلكتروني" و"الصورة") التي يحتاج إليها مقدّم طلب الاعتماد من موفّر الهوية لمشاركتها معه.
ملاحظة: تتوفّر واجهة برمجة التطبيقات Field API في الإصدار 132 من Chrome والإصدارات الأحدث.
params (اختياري) عنصر مخصّص يسمح بتحديد مَعلمات مفتاح/قيمة إضافية:
  • scope: قيمة سلسلة تحتوي على أذونات إضافية يحتاجها مقدّم الطلب، على سبيل المثال "drive.readonly calendar.readonly"
  • nonce: سلسلة عشوائية لضمان إصدار الردّ لهذا الطلب المحدّد. منع هجمات إعادة التشغيل
  • مَعلمات مخصّصة أخرى للمفاتيح والقيم

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

وضع النشاط

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

لاستخدام 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

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

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

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

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

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

مربّع حوار للوضع النشط في FedCM يعرض رسالة إفصاح للمتابعة، سيشارك مقدّم خدمة تحديد الهوية عنوان البريد الإلكتروني للمستخدم وصورة ملفه الشخصي مع الموقع الإلكتروني.
رسالة الإفصاح في الوضع النشط: يطلب مقدّم طلب المعالجة من موفِّر الهوية مشاركة عنوان البريد الإلكتروني للمستخدم وصورة ملفه الشخصي فقط.

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

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

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 (يُشار إليها اختصارًا باسم "إعادة المصادقة التلقائية") للمستخدمين بإعادة المصادقة تلقائيًا. يجب استيفاء الشروط التالية لإعادة مصادقة المستخدم تلقائيًا:

  • أجرى المستخدم المصادقة الأولية باستخدام 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 هو خاصية في واجهة برمجة التطبيقات لإدارة بيانات الاعتماد، ويتصرف بالطريقة نفسها التي يتصرف بها PasswordCredential و FederatedCredential ، وهو متوافق جزئيًا مع PublicKeyCredential أيضًا. يقبل الحقل القيم الأربع التالية:

  • 'optional'(الإعداد التلقائي): إعادة المصادقة التلقائية إن أمكن، وتتطلّب التوسّط في حال عدم توفّرها. ننصحك باختيار هذا الخيار في صفحة تسجيل الدخول.
  • 'required': تتطلّب هذه الميزة دائمًا التوسّط للمتابعة، على سبيل المثال، النقر على الزرّ "متابعة" في واجهة المستخدم. اختَر هذا الخيار إذا كان من المتوقّع من المستخدمين منح الإذن صراحةً في كل مرة يحتاجون فيها إلى المصادقة.
  • 'silent': إعادة المصادقة التلقائية إن أمكن، أو تعذُّر المصادقة بدون الحاجة إلى توسّط في حال عدم توفّر المصادقة ننصحك باختيار هذا الخيار في الصفحات التي تريد فيها إبقاء المستخدمين مسجّلين الدخول، ولكنها ليست صفحة تسجيل الدخول المخصّصة، مثل صفحة سلعة على موقع إلكتروني لشحن البضائع أو صفحة مقالة على موقع إلكتروني لأخبار.
  • 'conditional': يُستخدَم مع WebAuthn ولا يتوفّر مع FedCM في الوقت الحالي.

من خلال هذا الطلب، تحدث إعادة المصادقة التلقائية في الحالات التالية:

  • واجهة برمجة التطبيقات FedCM متاحة للاستخدام. على سبيل المثال، لم يوقِف المستخدم FedCM إما بشكل عام أو للمسؤول عن المعالجة في الإعدادات.
  • استخدم المستخدم حسابًا واحدًا فقط مع FedCM API لتسجيل الدخول إلى الموقع الإلكتروني على المتصفّح هذا.
  • سجَّل المستخدم الدخول إلى موفِّر الهوية باستخدام هذا الحساب.
  • لم يتم إجراء إعادة المصادقة التلقائية خلال آخر 10 دقائق.
  • لم يطلب مقدّم الطلب navigator.credentials.preventSilentAccess() تسجيل الدخول مجددًا بعد تسجيل الدخول السابق.

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

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

ويساعد ذلك في تقييم أداء واجهة برمجة التطبيقات وتحسين تجربة المستخدم وفقًا لذلك. وفي حال عدم توفّر هذه الطريقة، قد يُطلب من المستخدم تسجيل الدخول باستخدام ميزة 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. قد يُلقي هذا الوعد استثناءً للأسباب التالية:

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

عندما تعرض نقطة نهاية إلغاء الربط في موفِّر الهوية رداً، يتم إلغاء ربط موفِّر الهوية ومسؤول المعالجة في المتصفّح ويتم حلّ الوعد. يتم تحديد معرّف الحسابات التي تم إلغاء ربطها في الاستجابة من نقطة نهاية إلغاء الربط.

الخطوات التالية

راجِع كيفية تنفيذ حلّ الهوية باستخدام FedCM من جهة موفِّر الهوية.
تعرَّف على كيفية إدارة المستخدمين والمطوّرين لمشاركة FedCM، بما في ذلك تفعيلها أو إيقافها، على جميع المنصات والمواقع الإلكترونية.