يقدّم الإصدار 116 من Chrome إمكانات FedCM، مثل Login Hint API وUser Info API وRP Context API، ويبدأ إصدارًا تجريبيًا لمصدر واجهة برمجة التطبيقات IdP Sign-In Status API.
في الإصدار 116 من Chrome، يقدّم Chrome الميزات الثلاث الجديدة التالية لإدارة بيانات الاعتماد الفيدرالية (FedCM):
- Login Hint API: حدِّد حساب مستخدم مفضّلاً لتسجيل الدخول إليه.
- User Info API: يمكنك جلب معلومات المستخدم المتكرّر لكي يتمكّن موفِّر الهوية (IdP) من عرض زرّ تسجيل دخول مخصّص داخل إطار iframe.
- RP Context API: استخدِم عنوانًا مختلفًا عن "تسجيل الدخول" في مربّع حوار FedCM.
بالإضافة إلى ذلك، يبدأ Chrome إصدارًا علنيًا تجريبيًا لواجهة برمجة التطبيقات IdP Sign-In Status. إنّ واجهة برمجة التطبيقات IdP Sign-in Status API هي شرط أساسي، وسيكون هناك تغيير جذري عند طرحها. إذا كان لديك عملية تنفيذ حالية لميزة FedCM، احرص على المشاركة في الفترة التجريبية الأصلية.
Login Hint API
عند استدعاء FedCM، يعرض المتصفّح الحساب الذي تم تسجيل الدخول إليه من موفِّر الهوية (IdP) المحدّد. عندما يتيح موفِّر الهوية حسابات متعددة، يُدرج جميع الحسابات التي تم تسجيل الدخول إليها.

بعد تسجيل دخول المستخدم، يطلب الطرف الموثوق به (RP) أحيانًا من المستخدم إعادة المصادقة. ولكن قد لا يكون المستخدم متأكّدًا من الحساب الذي كان يستخدمه. إذا كان بإمكان مقدّم المراجعة تحديد الحساب الذي سيتم تسجيل الدخول باستخدامه، سيكون من الأسهل على المستخدِم اختيار حساب. سيتم طرح ملاحظة تسجيل الدخول في الإصدار 116 من Chrome، ويمكن للمسؤول عن نقطة الربط تضييق نطاق القائمة إلى جهة واحدة باستخدامها.
تضيف هذه الإضافة صفيفًا من login_hints
في استجابة نقطة نهاية
قائمة الحسابات من
مزوّد خدمة تعريف الهوية، مع جميع أنواع الفلاتر الممكنة التي يتيحها مزوّد خدمة تعريف الهوية. على سبيل المثال، يمكن أن يظهر ردّ
الحسابات على النحو التالي عندما يتيح موفِّر الهوية الفلترة حسب البريد الإلكتروني
ومعرّف الحساب:
{
"accounts": [{
"id": "demo1",
"email": "demo1@example.com",
"name": "John Doe",
"login_hints": ["demo1", "demo1@example.com"],
...
}, {
"id": "demo2",
"email": "demo2@example.com",
"name": "Jane Doe",
"login_hints": ["demo2", "demo2@example.com"],
...
}, ...]
}
من خلال تمرير login_hints
في قائمة الحسابات، يمكن لوحدة التحكّم في حدود الجلسة (RP) استدعاء
navigator.credentials.get()
باستخدام الموقع loginHint
كما هو موضّح في
نموذج الرمز البرمجي التالي لعرض الحساب المحدّد بشكل انتقائي:
return await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/manifest.json",
clientId: "123",
nonce: nonce,
loginHint : "demo1@example.com"
}]
}
});
User Info API
من الشائع الآن استخدام أزرار تسجيل الدخول المزيّنة بشعار موفِّر الهوية والتي تتيح للمستخدمين تسجيل الدخول باستخدام توحيد الهوية. ومع ذلك، فإنّ تزيين الزر باستخدام رمز الملف الشخصي للمستخدم ومعلوماته يجعل عملية تسجيل الدخول أكثر سهولة، خاصةً إذا سبق للمستخدم الاشتراك في هذا الموقع الإلكتروني باستخدام موفِّر خدمة إدارة الهوية.


يتمثل التحدي في أنّ الزر المخصّص يعتمد على ملفّات تعريف الارتباط التابعة لجهات خارجية في نطاق موفِّر الهوية (IdP) ضمن إطار iframe لتحديد المستخدِم الذي سجّل الدخول لعرض الزر، ولن يكون متاحًا بعد إيقاف ملفّات تعريف الارتباط التابعة لجهات خارجية نهائيًا.
توفّر User Info API، التي يتم طرحها في الإصدار 116 من Chrome، طريقة لموفّر الهوية (IdP) للحصول على معلومات المستخدم المتكرّر من الخادم بدون الاعتماد على ملفات تعريف الارتباط التابعة لجهات خارجية.
من المتوقّع أن يطلب موفِّر الهوية بيانات من واجهة برمجة التطبيقات من داخل إطار iframe مضمّن في الموقع الإلكتروني لموفِّر المراجعة، وذلك كي يتمكّن من استرداد معلومات المستخدم وعرض زر مخصّص كما لو كان جزءًا من مساحة عرض موفِّر المراجعة. من خلال طلب بيانات من واجهة برمجة التطبيقات، يقدّم المتصفّح طلبًا إلى نقطة نهاية قائمة الحسابات، ثم يعرض صفيفًا من معلومات المستخدم في الحالات التالية:
- سجّل المستخدم الدخول إلى مقدّم الخدمة باستخدام موفِّر الهوية من خلال FedCM في السابق على مثيل المتصفّح نفسه ولم يتم محو البيانات.
- سجَّل المستخدم الدخول إلى موفِّر الهوية (IdP) في مثيل المتصفّح نفسه.
// Iframe displaying a page from the https://idp.example origin
const user_info = await IdentityProvider.getUserInfo({
configUrl: "https://idp.example/fedcm.json",
clientId: "client1234"
});
// IdentityProvider.getUserInfo returns an array of user information.
if (user_info.length > 0) {
// Chrome puts returning accounts first, so the first account received is guaranteed to be a returning account.
const name = user_info[0].name;
const given_name = user_info[0].given_name;
const display_name = given_name ? given_name : name;
const picture = user_info[0].picture;
const email = user_info[0].email;
// Renders the personalized sign-in button with the information above.
}
يُرجى العِلم أنّ السماح باستدعاء IdentityProvider.getUserInfo()
من داخل ملف
iframe الذي يكون مصدره هو نفسه مصدر موفِّر الهوية، يجب أن يسمح ملف HTML المضمّن بوضوح
بهذا من خلال سياسة
الأذونات في identity-credentials-get
.
<iframe src="https://fedcm-idp-demo.glitch.me" allow="identity-credentials-get"></iframe>
يمكنك الاطّلاع على هذا الإجراء على الرابط https://fedcm-rp-demo.glitch.me/button.
RP Context API
تتيح واجهة برمجة التطبيقات RP Context API، التي يتم طرحها في الإصدار 116 من Chrome، لمسؤول المعالجة تعديل السلسلة في واجهة مستخدم مربّع حوار FedCM لكي تتمكّن من استيعاب ملفّات سياق المصادقة المحدّدة مسبقًا. اطّلِع على لقطات الشاشة التالية لمعرفة الخيارات المختلفة:




إنّ طريقة الاستخدام بسيطة، ما عليك سوى تقديم قيمة السمة identity.context
من بين "signin"
(الإعداد التلقائي) أو "signup"
أو "use"
أو "continue"
.
const credential = await navigator.credentials.get({
identity: {
// "signin" is the default, "signup", "use" and "continue"
// can also be used
context: "signup",
providers: [{
configURL: "https://idp.example/fedcm.json",
clientId: "1234",
}],
}
});
مرحلة التجربة والتقييم لواجهة برمجة التطبيقات IdP Sign-In Status API
يبدأ Chrome مرحلة تجريبية لـ IdP Sign-In Status API على أجهزة الكمبيوتر المكتبي من الإصدار 116 من Chrome، ثم على متصفّح Chrome لأجهزة Android لاحقًا. تتيح لك مراحل التجربة والتقييم استخدام ميزة جديدة أو تجريبية لإنشاء وظائف يمكن للمستخدمين تجربتها لفترة محدودة قبل أن تصبح الميزة متاحة للجميع.
واجهة برمجة التطبيقات لحالة تسجيل الدخول إلى موفِّر الهوية: هي آلية يُعلم فيها موفِّر الهوية المتصفّح بحالة تسجيل دخول المستخدم على موفِّر الهوية. باستخدام واجهة برمجة التطبيقات هذه، يمكن للمتصفح تقليل الطلبات غير الضرورية إلى موفِّر الهوية والحدّ من الهجمات المحتملة المتعلّقة بالتوقيت.
إبلاغ المتصفّح بحالة تسجيل دخول المستخدم
يمكن لموفّري الهوية إرسال حالة تسجيل دخول المستخدم إلى المتصفّح من خلال إرسال عنوان HTTP أو من خلال طلب واجهة برمجة تطبيقات JavaScript، وذلك عندما يكون المستخدم مسجِّلاً الدخول إلى موفّر الهوية، أو عندما يكون المستخدم مسجِّلاً الخروج من جميع حسابات موفّر الهوية. يسجِّل المتصفّح الحالة على أنّها إحدى الحالات التالية: "تسجيل الدخول" أو "تسجيل الخروج" أو "غير معروف" (الإعداد التلقائي).
للإشارة إلى أنّ المستخدم سجّل الدخول، أرسِل رأس IdP-SignIn-Status: action=signin
HTTP في عنصر تنقّل من المستوى الأعلى أو طلب مورد فرعي من المصدر نفسه:
IdP-SignIn-Status: action=signin
بدلاً من ذلك، يمكنك استدعاء واجهة برمجة التطبيقات JavaScript IdentityProvider.login()
من مصدر موفِّر الهوية:
IdentityProvider.login()
ستسجِّل هذه الطلبات حالة تسجيل دخول المستخدم على أنّها "تسجيل دخول". عندما يتم ضبط حالة تسجيل دخول المستخدم على "تسجيل الدخول"، يُرسل التفاعل مع FedCM طلبات إلى نقطة نهاية قائمة حسابات IDEP ويعرض الحسابات المتاحة للمستخدم في مربع حوار FedCM.
للإشارة إلى أنّه تم تسجيل خروج المستخدم من جميع حساباته، أرسِل IdP-SignIn-Status: action=signout-all
عنوان HTTP في تنقّل على مستوى أعلى أو في طلب مورد فرعي من المصدر نفسه:
IdP-SignIn-Status: action=signout-all
بدلاً من ذلك، يمكنك استدعاء واجهة برمجة التطبيقات JavaScript IdentityProvider.logout()
من مصدر موفِّر الهوية:
IdentityProvider.logout()
وسيؤدي ذلك إلى تسجيل حالة تسجيل دخول المستخدم على أنّها "تسجيل الخروج". عندما تكون حالة تسجيل دخول العميل هي "تسجيل الخروج"، يتعذّر الاتصال بواجهة برمجة التطبيقات FedCM بدون إرسال طلب إلى نقطة نهاية قائمة حسابات موفِّر الهوية.
تكون حالة تسجيل الدخول إلى موفِّر الهوية مضبوطة تلقائيًا على "غير معروف". يتم استخدام هذه الحالة قبل أن يرسل موفِّر الهوية إشارة باستخدام واجهة برمجة التطبيقات IdP Sign-In Status API. نقدّم هذه الحالة لتسهيل عملية النقل، لأنّه قد يكون المستخدم قد سجّل الدخول إلى موفّر الهوية (IdP) عند طرح واجهة برمجة التطبيقات هذه، وقد لا يتمكن موفّر الهوية (IdP) من إرسال إشارة بهذه الحالة إلى المتصفّح بحلول وقت استدعاء FedCM لأول مرة. في هذه الحالة، نُرسل طلبًا إلى نقطة نهاية قائمة حسابات موفِّر الهوية ونعدّل الحالة استنادًا إلى الردّ من نقطة نهاية قائمة الحسابات:
- إذا كانت نقطة النهاية تعرض قائمة بالحسابات النشطة، عدِّل الحالة إلى "تسجيل الدخول" وافتح مربّع الحوار FedCM لعرض هذه الحسابات.
- إذا لم تُعرِض نقطة النهاية أي حسابات، عدِّل الحالة إلى "تسجيل الخروج" وأعِد توجيه مكالمة FedCM.
ماذا يحدث إذا انتهت صلاحية جلسة المستخدم؟ السماح للمستخدم بتسجيل الدخول من خلال مسار تسجيل دخول ديناميكي
على الرغم من أنّ موفّر الهوية يواصل إبلاغ المتصفّح بحالة تسجيل دخول المستخدِم، قد لا تكون البيانات متزامنة، مثلاً عند انتهاء صلاحية الجلسة. يحاول المتصفّح إرسال طلب مزوّد ببيانات اعتماد إلى نقطة نهاية قائمة الحسابات عندما تكون حالة تسجيل الدخول هي "تسجيل الدخول"، ولكن يرفض الخادم الطلب لأنّ الجلسة لم تعُد متاحة. في مثل هذا السيناريو، يمكن للمتصفّح السماح للمستخدم ديناميكيًا بتسجيل الدخول إلى موفِّر الهوية من خلال نافذة منبثقة.
سيعرض مربّع حوار FedCM رسالة، كما هو موضّح في الصورة التالية:

عند النقر على الزر متابعة، يفتح المتصفّح نافذة منبثقة تُرسِل المستخدم إلى صفحة تسجيل الدخول في موفِّر الهوية.

يمكن تحديد عنوان URL لصفحة تسجيل الدخول (الذي يجب أن يكون مصدر موفِّر الهوية) باستخدام signin_url
كجزء من ملف إعداد موفِّر الهوية.
{
"accounts_endpoint": "/auth/accounts",
"client_metadata_endpoint": "/auth/metadata",
"id_assertion_endpoint": "/auth/idtokens",
"signin_url": "/signin"
}
}
النافذة المنبثقة هي نافذة متصفّح عادية تستخدِم ملفات تعريف الارتباط الخاصة بالطرف الأول. إنّ أيّ إجراء يحدث داخل نافذة المحتوى متروك لموفّر الهوية، ولكن لا تتوفّر أيّ عناوين لنوافذ لطلب التواصل بين مصادر مختلفة إلى صفحة الطرف المعتمَد. بعد تسجيل دخول المستخدم، يجب أن ينفّذ موفِّر الهوية ما يلي:
- أرسِل عنوان
IdP-SignIn-Status: action=signin
أو استخدِم واجهة برمجة التطبيقاتIdentityProvider.login()
لإعلام المتصفّح بأنّه تم تسجيل دخول المستخدم. - اتصل بالرقم
IdentityProvider.close()
لإغلاق النافذة المنبثقة.
// User is signed in...
// Don't forget feature detection.
if (IdentityProvider) {
// Signal to the browser that the user has signed in.
IdentityProvider.close();
}
يمكنك تجربة سلوك واجهة برمجة التطبيقات IdP Sign-In Status API في الإصدار التجريبي. تنتهي صلاحية الجلسة بعد ثلاث دقائق بعد تسجيل الدخول إلى موفِّر الهوية التجريبي. بعد ذلك، يمكنك مراقبة عملية تسجيل الدخول إلى موفِّر الهوية من خلال سلوك النافذة المنبثقة.
المشاركة في الفترة التجريبية لإصدار التطبيق الأصلي
يمكنك تجربة واجهة برمجة التطبيقات IdP Sign-In Status API على الجهاز من خلال تفعيل علامة Chrome
chrome://flags#fedcm-idp-signin-status-api
على
Chrome 116 أو إصدار أحدث.
يمكنك أيضًا تفعيل واجهة برمجة التطبيقات IdP Sign-In Status API من خلال تسجيل إصدار تجريبي من المصدر مرّتين:
- سجِّل تجربة مصدر لموفِّر الهوية.
- سجِّل مصدرًا تابعًا لجهة خارجية تجريبيًا لحساب المطوّر.
تتيح لك مراحل التجربة والتقييم تجربة ميزات جديدة وتقديم ملاحظات حول سهولة استخدامها وفعاليتها ومدى ملاءمتها لمجتمع معايير الويب. لمزيد من المعلومات، يمكنك الاطّلاع على دليل "إصدارات الإصدارات العلنية" لمطوّري الويب.
تتوفّر مرحلة التجربة والتقييم لواجهة برمجة التطبيقات IdP Sign-In Status API من Chrome 116 إلى Chrome 119.
تسجيل مرحلة التجربة والتقييم لموفِّر خدمة Identification
- انتقِل إلى صفحة تسجيل الفترة التجريبية في Origin.
- انقر على الزر تسجيل واملأ النموذج لطلب رمز مميّز.
- أدخِل مصدر موفِّر خدمة المصادقة على أنّه مصدر الويب.
- انقر على إرسال.
- أضِف علامة
origin-trial
<meta>
إلى رأس الصفحات التي تستخدمIdentityProvider.close()
. على سبيل المثال، قد يبدو هذا على النحو التالي:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
.
تسجيل فترة تجريبية لجهة خارجية في "المسؤول عن المعالجة"
- انتقِل إلى صفحة تسجيل الفترة التجريبية في Origin.
- انقر على الزر تسجيل واملأ النموذج لطلب رمز مميّز.
- أدخِل مصدر موفِّر خدمة المصادقة على أنّه مصدر الويب.
- ضَع علامة في المربّع بجانب مطابقة الجهات الخارجية لإدخال الرمز المميّز باستخدام JavaScript في مصادر أخرى.
- انقر على إرسال.
- تضمين الرمز المميّز الصادر على موقع إلكتروني تابع لجهة خارجية
لتضمين الرمز المميّز على موقع إلكتروني تابع لجهة خارجية، أضِف الرمز التالي إلى مكتبة JavaScript أو حِزمة تطوير البرامج (SDK) التي يتم عرضها من مصدر موفِّر الهوية.
const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);
استبدِل TOKEN_GOES_HERE
برمزك المميّز.
التفاعل مع الملاحظات ومشاركتها
إذا كانت لديك ملاحظات أو واجهت أي مشاكل أثناء الاختبار، يمكنك مشاركتها على crbug.com.
صورة مقدمة من Dan Cristian Pădureț على Unsplash