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

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

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

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

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

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

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

إذا سجّل مستخدم الدخول سابقًا إلى الجهة المحظورة باستخدام موفِّر الهوية من خلال FedCM، يتم حفظ العلاقة من خلال المتصفح محليًا كقائمة الشبكات الحسابات. يمكن أن يبدأ الجهة المحظورة قطع الاتصال من خلال استدعاء IdentityCredential.disconnect(). ويمكن استدعاء هذه الدالة من إطار الجهة المحظورة من المستوى الأعلى على الجهة المحظورة أن تجتاز configURL، وهي clientId التي يستخدمها. ضمن موفِّر الهوية، ورقم accountHint لإلغاء ربط موفِّر الهوية (idP). حساب يمكن أن يكون التلميح سلسلة عشوائية طالما أن نقطة نهاية الفصل يمكن أن تحدد الحساب، مثل عنوان بريد إلكتروني أو رقم تعريف مستخدم ليس بالضرورة تتطابق مع رقم تعريف الحساب الذي توفّره نقطة نهاية قائمة الحسابات:

// 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. قد يؤدي هذا الوعد إلى استثناء للأسباب التالية:

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

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

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

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

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

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

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

الموقع الوصف
account_hint تلميح بشأن حساب موفِّر الهوية (idP).
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

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

  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 عندما يكون موفِّر الهوية (RP) وموفِّر الهوية (idP) للموقع الإلكتروني نفسه.

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

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

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

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

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

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

ملخّص

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

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