آخر الأخبار من FedCM: واجهة برمجة تطبيقات Domain Hint API

بدءًا من Chrome 123، يمكنك استخدام معلومات النطاق إلى جانب واجهة برمجة التطبيقات الاتحادية لإدارة بيانات الاعتماد (FedCM). باستخدام واجهة برمجة التطبيقات Domain Hint API، يمكن للمطوّرين تقديم تجربة أفضل للمستخدمين من خلال عرض حسابات تسجيل الدخول المُدمَجة فقط من النطاق الذي يقبلونه.

واجهة برمجة تطبيقات تلميح النطاق

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

باستخدام Domain Hint API، يمكن للجهات المحظورة تحديد سمة domainHint في طلب بيانات من واجهة برمجة التطبيقات في FedCM لعرض الحسابات المطابقة فقط للمستخدم. يمكن لموفّر الهوية تقديم موقع domain_hints كجزء من استجابة من نقطة نهاية قائمة الحسابات لتحديد النطاقات المرتبطة بالحساب. بهذه الطريقة، يمكن للمتصفّح عرض الحسابات المطابقة بدون الإفصاح عن تلميح النطاق المطلوب لموفِّر الهوية.

سيظهر مثال على استجابة JSON من نقطة نهاية قائمة الحسابات على النحو التالي:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

يمكن لمسؤول المعالجة الاتصال بـ navigator.credentials.get() باستخدام موقع domainHint لمحاولة فلترة الحسابات. على سبيل المثال، لنفترض أنّ أحد المستخدمين يزور corp-partner.example ويتسجيل الدخول باستخدام حساب من corp.example. سيستدعي الموقع الإلكتروني واجهة برمجة التطبيقات على النحو التالي:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

لا يتم إرسال القيمة domainHint إلى نقطة نهاية قائمة الحسابات للفلترة من جهة الخادم، لأنّها يمكن أن تكون متجه الملف المرجعي إلى موفِّر الهوية. وبدلاً من ذلك، ينفِّذ Chrome طلب FedCM كالمعتاد، ويستبعد الحسابات التي لا تتطابق مع قيمة domainHint التي تحدّدها الاستدعاء navigator.credentials.get(). بعد ذلك، يعرض Chrome مربّع حوار FedCM للمستخدم مع قائمة الحسابات الجديدة. يشبه هذا الأسلوب واجهة برمجة تطبيقات تلميح تسجيل الدخول، ولكن هاتان الواجهتان تجيبان عن أسئلة مختلفة. تهدف واجهة برمجة تطبيقات "معلومات تسجيل الدخول" إلى الإجابة عن "ما هو معرّف للمستخدم الذي أريده؟"، بينما تهدف "تلميح النطاق" إلى الإجابة عن "ما هي الشركة أو الخادم الذي يجب أن ينتمي إليه هذا الحساب؟".

عند استخدام domainHint: "any"، يزيل Chrome الحسابات التي لا تتضمّن أي نطاقات (أي أنّه لا يتم تمرير domain_hints أو أنّه فارغ). على سبيل المثال، يسمح ذلك بحالات الاستخدام التي لا يسمح فيها الجهة المحظورة إلا بالحسابات المُدارة في عملية الاشتراك.

عندما لا تتطابق أي حسابات مع domainHint، يعرض مربّع حوار FedCM طلب تسجيل الدخول، الذي يسمح للمستخدم بتسجيل الدخول إلى حساب موفِّر الهوية (IdP) يتطابق مع التلميح الذي طلبه موفِّر الموارد (RP). عندما ينقر المستخدم على رسالة المطالبة، يتم فتح نافذة منبثقة تتضمّن عنوان URL لصفحة تسجيل الدخول المحدّد في ملف config. بعد ذلك، يتم إلحاق الرابط بتلميح تسجيل الدخول ومعلمات الاستعلام عن تلميح النطاق.

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