تحديثات FedCM: إلغاء ربط واجهة برمجة التطبيقات وتعديلان

بدايةً من Chrome 122، تتوفر إلغاء ربط واجهة برمجة التطبيقات Federated Credential Management API (FedCM). تسمح واجهة برمجة التطبيقات "إلغاء الربط" للجهات المعتمَدة بإلغاء ربط المستخدمين من حساب موفِّر الهوية بدون الاعتماد على ملفات تعريف الارتباط التابعة لجهات خارجية. إضافةً إلى ذلك، هناك تعديلان على طريقة التعامل مع الموقع نفسه في FedCM.

إلغاء ربط واجهة برمجة التطبيقات

عندما يُنشئ المستخدم حسابًا على جهة معتمَدة (RP، أي الموقع الإلكتروني الذي يستخدم موفّر الهوية للمصادقة) من خلال اتحاد الهوية، عادةً ما يسجّل موفِّر الهوية (IdP)، وهي الخدمة التي توفّر معلومات المصادقة ومعلومات الحساب للجهات الأخرى، الاتصال على خادمه. ويسمح الاتصال المخزَّن لموفِّر الهوية بتتبُّع الجهات المحظورة التي سجّل المستخدم الدخول إليها وتحسين تجربته. على سبيل المثال، للحصول على تجربة أفضل عند عودة المستخدم لاحقًا إلى الجهة المحظورة، يتم التعامل مع حساب المستخدم الذي يتضمّن موفِّر الهوية كحساب مكرّر، ما يسمح بميزات مثل إعادة المصادقة التلقائية والأزرار المخصّصة التي تعرض الحساب المستخدَم.

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

إلغاء الربط بواجهة برمجة التطبيقات يسمح للمستخدم بإلغاء ربط حساب موفِّر الهوية من الجهة المحظورة على المتصفح وعلى خادم موفِّر الهوية من خلال إرسال إشارة إليه إلى نقطة النهاية المحددة. يحتاج المستخدم إلى أن يكون قد أكمل عملية توحيد الهوية باستخدام واجهة برمجة تطبيقات إدارة بيانات الاعتماد الفيدرالية (FedCM). بمجرد إلغاء ربط المستخدم، يتم التعامل معه كمستخدم جديد في المرة التالية التي يحاول فيها تسجيل الدخول إلى الجهة المحظورة باستخدام موفِّر الهوية (IdP).

إلغاء ربط موفِّر الهوية بالجهة المحظورة

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

عندما تعرض نقطة نهاية إلغاء ربط موفِّر الهوية استجابةً، يتم إلغاء ربط موفِّر الهوية (RP) وموفِّر الهوية (IdP) على المتصفِّح ويتم حلّ المشكلة. يتم تحديد حسابات المستخدمين التي تم إلغاء ربطها في الاستجابة من نقطة نهاية إلغاء الربط.

إعداد ملف إعداد موفِّر الهوية

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

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

إلغاء ربط الحساب على نقطة نهاية إلغاء الربط

من خلال استدعاء IdentityCredential.disconnect()، يرسل المتصفّح طلب POST متعدد المصادر يحتوي على ملفات تعريف الارتباط ونوع محتوى application/x-www-form-urlencoded إلى نقطة نهاية إلغاء الربط هذه مع المعلومات التالية:

الموقع الوصف
account_hint تلميح لحساب موفِّر الهوية
client_id هو معرِّف العميل الخاص بالجهة المحظورة.
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

وعند استلام الطلب، على خادم موفِّر الهوية أن:

  1. يمكنك الردّ على الطلب باستخدام مشاركة الموارد المتعدّدة المصادر (CORS).
  2. تحقَّق من أنّ الطلب يحتوي على عنوان HTTP يتضمّن العنصر Sec-Fetch-Dest: webidentity.
  3. عليك مطابقة عنوان Origin مع أصل الجهة المحظورة التي يتم تحديدها من خلال client_id. الرفض في حال عدم التطابق
  4. ابحث عن الحساب الذي يتطابق مع account_hint.
  5. ألغِ ربط حساب المستخدم من قائمة الحسابات المرتبطة الخاصة بالجهة المحظورة.
  6. استجب للمتصفّح باستخدام account_id الخاصة بالمستخدم المحدّد بتنسيق JSON.

في ما يلي مثال لحمولة JSON للاستجابة:

{
  "account_id": "account456"
}

إذا أراد موفِّر الهوية (IdP) من المتصفّح إلغاء ربط جميع الحسابات المرتبطة بالجهة المحظورة بدلاً من ذلك، مرِّر سلسلة لا تتطابق مع أي رقم تعريف حساب، على سبيل المثال "*".

يتم الآن تخطّي عملية التحقّق من /.well-known/web-identity عندما يكون كلّ من الجهة المحظورة وموفِّر الهوية (IdP) في الموقع الإلكتروني نفسه.

عند تطوير نظام FedCM، قد يكون اختبار أو تنظيم نطاقات خادم الجهة المحظورة هي النطاقات الفرعية لخادم موفِّر الهوية للإنتاج. على سبيل المثال، يكون خادم موفِّر الهوية للإنتاج على idp.example، بينما يكون كل من خادم الجهة المحظورة المرحلية وخادم موفِّر الهوية المرحلي على staging.idp.example. وبما أنّه يجب وضع الملف المعروف على جذر خادم eTLD+1 لموفِّر الهوية، يجب أن يكون على idp.example/.well-known/web-identity ويكون خادم الإنتاج. وبما أنّه ليس من الضروري أن يضع المطوّرون ملفات في بيئة الإنتاج أثناء تطويرها، لن يتمكّنوا من اختبار ذلك في FedCM.

بدءًا من إصدار Chrome 122، إذا كان نطاق الجهة المحظورة ونطاق موفِّر الهوية متطابقَين، يتخطّى Chrome التحقّق من الملف المعروف. بهذه الطريقة، سيتمكن المطورون من الاختبار في مثل هذا السيناريو.

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

في السابق، كان Chrome يسمح بضبط حالة تسجيل الدخول فقط (باستخدام العنوان Set-Login: logged-in مثلاً) عندما يكون الطلب هو المصدر نفسه لجميع الكيانات الأصلية. أدى ذلك إلى منع عمليات تسجيل الدخول من خلال الموقع الإلكتروني نفسه fetch() يطلب ضبط حالة تسجيل الدخول.

على سبيل المثال، ننصحك بالتفكير في موقع إلكتروني يتيح للمستخدمين إدخال اسم المستخدم وكلمة المرور على idp.example، ولكن يتم نشر بيانات الاعتماد على login.idp.example باستخدام fetch(). لم يكن تسجيل حالة تسجيل الدخول إلى المتصفِّح باستخدام واجهة برمجة التطبيقات الخاصة بحالة تسجيل الدخول ممكنًا لأنّ النطاقَين من مصادر متعددة ومن الموقع الإلكتروني نفسه.

مع هذا التغيير، خفّفنا الشرط الخاص بواجهة برمجة التطبيقات الخاصة بحالة تسجيل الدخول لتكون نفس الموقع مع جميع الكيانات الأصلية، وجعلنا المثال السابق ممكنًا لضبط حالة تسجيل دخول login.idp.example باستخدام عنوان HTTP (Set-Login: logged-in).

ملخّص

باستخدام واجهة برمجة التطبيقات Uninstall API، أصبح بإمكان FedCM الآن إلغاء ربط الجهة المحظورة بموفِّر الهوية بدون الاعتماد على ملفات تعريف الارتباط التابعة لجهات خارجية. لإجراء ذلك، يُرجى الاتصال بـ IdentityCredential.disconnect() على الجهة المحظورة. باستخدام هذه الوظيفة، يرسل المتصفّح طلبًا إلى نقطة نهاية إلغاء ربط موفِّر الهوية حتى يتمكّن موفِّر الهوية من إنهاء الاتصال على الخادم، ثم على المتصفِّح.

أعلنّا أنّه يتم تخطّي عملية التحقّق من /.well-known/web-identity عندما يكون موفِّر الهوية (RP) وموفِّر الهوية (IdP) هو الموقع الإلكتروني نفسه لأغراض الاختبار. ويمكن الآن أيضًا ضبط حالة تسجيل الدخول من خلال عنوان استجابة HTTP من المورد الفرعي لموفِّر الهوية (IdP) للموقع الإلكتروني نفسه.