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

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

Domain Hint API

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

باستخدام واجهة برمجة التطبيقات Domain Hint API، يمكن لموفّري المحتوى تحديد موقع domainHint في طلب واجهة برمجة التطبيقات FedCM API لعرض الحسابات المطابقة فقط للمستخدم. يمكن لموفّر الهوية تقديم موقع 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 للمستخدم مع قائمة الحسابات الجديدة. يشبه هذا النهج واجهة برمجة التطبيقات Login Hint، ولكن تجيب هاتان الواجهتَان لبرمجة التطبيقات عن أسئلة مختلفة. تهدف Login Hint API إلى الإجابة عن السؤال "ما هو المعرّف للمستخدم الذي أريده؟"، في حين تهدف Domain Hint إلى الإجابة عن السؤال "أي مؤسسة أو خادم يجب أن ينتمي إليه هذا الحساب؟".

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

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

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