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

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

واجهة برمجة تطبيقات Domain Hint

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

باستخدام Domain Hint API، يمكن للجهات المحظورة تحديد سمة domainHint عند طلب بيانات من FedCM API لعرض الحسابات المطابقة للمستخدم فقط. يمكن لموفِّر الهوية(IdP) توفير موقع 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 طلب "المراسلة عبر السحابة الإلكترونية من Firebase" كالمعتاد، ويفلتر الحسابات التي لا تتطابق مع قيمة domainHint التي تم تحديدها في طلب navigator.credentials.get(). بعد ذلك، يعرض Chrome مربع حوار FedCM للمستخدم الذي يتضمّن قائمة الحسابات الجديدة. يشبه هذا الأسلوب واجهة برمجة التطبيقات لتلميح تسجيل الدخول، ولكن هاتان الواجهتان من الواجهات يجيبان عن أسئلة مختلفة. تهدف واجهة برمجة التطبيقات Login Hint API إلى الإجابة "ما هو المعرّف الذي أريده للمستخدم؟"، في حين تهدف أداة Domain Hint إلى الإجابة عن "ما الشركة أو الخادم الذي يجب أن ينتمي إليه هذا الحساب؟".

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

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

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