يتضمّن الإصدار 120 من Chrome Login Status API لخدمة FedCM. تسمح واجهة برمجة التطبيقات Login Status API (المعروفة سابقًا باسم IdP Sign-in Status API) للمواقع الإلكترونية، ولا سيما موفّري الهوية، بإرسال إشارة إلى المتصفّح عندما يتسجيل مستخدموها الدخول ويخرجون منه. يستخدم FedCM هذه الإشارة لحلّ مشكلة هجوم التوقيت الصامت ، ما يسمح لـ FedCM بالعمل بدون ملفّات تعريف الارتباط التابعة لجهات خارجية على الإطلاق. يعالج هذا التعديل آخر التغييرات غير المتوافقة مع الإصدارات السابقة التي سبق أن حدّدناها في البيان الأصلي عن نية الشحن لبرنامج FedCM، كجزء من نطاق عملنا.
على الرغم من أنّ Login Status API تحسّن من خصائص الخصوصية وسهولة الاستخدام، إلا أنّه تغيير غير متوافق مع الإصدارات السابقة بعد طرحه. إذا كان لديك عملية تنفيذ حالية لـ FedCM، احرص على تعديلها باستخدام التعليمات التالية.
بالإضافة إلى ذلك، يطرح Chrome ميزتَين جديدتَين من إدارة بيانات الاعتماد المُدمَجة (FedCM):
- Error API: يمكنك إرسال إشعارات إلى المستخدمين عند تعذُّر محاولة تسجيل الدخول باستخدام واجهة مستخدم أصلية، وذلك استنادًا إلى ردّ الخادم من نقطة نهاية تأكيد الهوية، إن توفّرت.
- Auto-Selected Flag API: لإرسال إشعار إلى موفِّر الهوية (IdP) والجهة الموثوق بها (RP) في حال اختيار بيانات اعتماد تلقائيًا في العملية
واجهة برمجة التطبيقات Login Status API
Login Status API هي آلية يُعلم من خلالها الموقع الإلكتروني، خاصةً موفِّر الهوية، المتصفّح بحالة تسجيل دخول المستخدم على موفِّر الهوية. باستخدام واجهة برمجة التطبيقات هذه، يمكن للمتصفّح تقليل الطلبات غير الضرورية إلى موفِّر الهوية والحدّ من الهجمات المحتملة المتعلّقة بالتوقيت.
إبلاغ المتصفّح بحالة تسجيل دخول المستخدم
يمكن لموفّري الهوية إرسال حالة تسجيل دخول المستخدم إلى المتصفّح من خلال إرسال عنوان HTTP
أو من خلال طلب واجهة برمجة تطبيقات JavaScript عندما يكون المستخدم مسجّلاً الدخول إلى موفّر الهوية أو عندما
يكون قد سجّل الخروج من جميع حسابات موفّر الهوية. يحتفظ المتصفّح بمتغيّر ثلاثي الحالات يمثّل حالة تسجيل الدخول
لكل موفِّر هوية (يتم تحديده من خلال
عنوان URL الخاص بالإعدادات) وبقيمه المحتملة logged-in
وlogged-out
وunknown
. الحالة التلقائية
هي unknown
.
للإشارة إلى أنّ المستخدم سجّل الدخول، أرسِل عنوان HTTP Set-Login: logged-in
في عنصر تنقّل من المستوى الأعلى أو طلب مورد فرعي من المصدر نفسه:
Set-Login: logged-in
بدلاً من ذلك، يمكنك استدعاء JavaScript API navigator.login.setStatus('logged-in')
من مصدر موفِّر الهوية:
navigator.login.setStatus('logged-in');
تسجِّل هذه المكالمات حالة تسجيل دخول المستخدم على أنّها logged-in
. عندما يتم ضبط حالة تسجيل دخول
المستخدم على logged-in
، يُقدّم مقدّم الطلبات الذي يتصل بـ FedCM طلبات إلى نقطة نهاية قائمة
حسابات موفِّر الهوية ويعرض الحسابات المتاحة للمستخدم في مربع diálogo FedCM.
للإشارة إلى أنّ المستخدم قد سجّل الخروج من جميع حساباته، أرسِل Set-Login:
logged-out
عنوان HTTP في عنصر تنقّل من المستوى الأعلى أو طلب موارد فرعية من المصدر نفسه:
Set-Login: logged-out
بدلاً من ذلك، يمكنك استدعاء واجهة برمجة التطبيقات JavaScript navigator.login.setStatus('logged-out')
من مصدر موفِّر الهوية:
navigator.login.setStatus('logged-out');
تسجِّل هذه المكالمات حالة تسجيل دخول المستخدم على أنّها logged-out
. عندما تكون حالة تسجيل دخول المستخدم
logged-out
، يتعذّر الاتصال بواجهة برمجة التطبيقات FedCM بدون إرسال
طلب إلى نقطة نهاية قائمة حسابات موفِّر الهوية.
يتم ضبط الحالة unknown
قبل أن يرسل موفّر الهوية إشارة باستخدام واجهة برمجة التطبيقات Login
Status API. لقد طرحنا هذه الحالة لتسهيل عملية النقل، لأنّه قد يكون قد سبق للمستخدم تسجيل الدخول إلى موفِّر الهوية عند طرحنا واجهة برمجة التطبيقات هذه. قد لا تتوفر لموفِّر الهوية
فرصة للإشارة إلى ذلك للمتصفّح بحلول وقت استدعاء FedCM لأول مرة. في
هذه الحالة، نُرسل طلبًا إلى نقطة نهاية قائمة حسابات موفِّر الهوية ونعدِّل
الحالة استنادًا إلى الاستجابة الواردة من نقطة نهاية قائمة الحسابات:
- إذا كانت نقطة النهاية تعرض قائمة بالحسابات النشطة، عدِّل الحالة إلى
logged-in
وافتح مربّع حوار FedCM لعرض هذه الحسابات. - إذا لم تُعرِض نقطة النهاية أي حسابات، عدِّل الحالة إلى
logged-out
و أوقِف طلب FedCM.
ماذا يحدث إذا انتهت صلاحية جلسة المستخدم؟ اسمح للمستخدم بتسجيل الدخول من خلال مسار تسجيل دخول ديناميكي.
على الرغم من أنّ موفّر الهوية (IdP) يواصل إبلاغ المتصفّح بحالة تسجيل دخول المستخدم، قد لا تكون الحالة متزامنة، مثلاً عند انتهاء صلاحية الجلسة. يحاول المتصفّح
إرسال طلب مزوّد ببيانات اعتماد إلى نقطة نهاية قائمة الحسابات عندما تكون حالة تسجيل الدخول
logged-in
، ولكن لا يعرض الخادم أي حسابات لأنّ الجلسة
لم تعُد متاحة. في مثل هذا السيناريو، يمكن للمتصفّح السماح ديناميكيًا للمستخدم بتسجيل الدخول إلى موفِّر الهوية (IdP) من خلال نافذة حوار.
يعرض مربّع حوار FedCM رسالة تقترح تسجيل الدخول، كما هو موضّح في الصورة التالية.

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

يتم تحديد عنوان URL لصفحة تسجيل الدخول باستخدام login_url
كجزء من ملف إعدادات موفِّر الهوية.
{
"accounts_endpoint": "/auth/accounts",
"client_metadata_endpoint": "/auth/metadata",
"id_assertion_endpoint": "/auth/idtokens",
"login_url": "/login"
}
}
مربّع الحوار هو نافذة متصفّح عادية تحتوي على ملفات تعريف ارتباط الطرف الأول. إنّ أيّ مما يحدث داخل مربّع الحوار متروك لمسؤول عن إدارة الهوية، ولا تتوفّر أيّ معرّفات نوافذ لتقديم طلب تواصل بين مصادر مختلفة إلى صفحة الطرف المعتمَد. بعد تسجيل دخول المستخدم، يجب أن ينفّذ موفِّر الهوية ما يلي:
- أرسِل رأس
Set-Login: logged-in
أو استخدِم واجهة برمجة التطبيقاتnavigator.login.setStatus("logged-in")
لإعلام المتصفّح بأنّه تم تسجيل دخول المستخدِم. - اتصل بالرقم
IdentityProvider.close()
لإغلاق مربّع الحوار.

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

واجهة برمجة تطبيقات IdP HTTP
في استجابة id_assertion_endpoint
، يمكن لموفّر الهوية عرض رمز مميّز في
المتصفّح إذا كان بإمكانه إصداره عند الطلب. في هذا الاقتراح، في حال تعذّر إصدار رمز مميّز، يمكن لموفّر خدمة إدارة الهوية عرض استجابة "خطأ" تتضمّن حقلَين جديدَين optional:
code
url
// id_assertion_endpoint response
{
"error": {
"code": "access_denied",
"url": "https://idp.example/error?type=access_denied"
}
}
بالنسبة إلى الرمز، يمكن لموفِّر الهوية اختيار أحد الأخطاء المعروفة من قائمة أخطاء OAuth 2.0
المحدّدة
[invalid_request
وunauthorized_client
وaccess_denied
وserver_error
و
temporarily_unavailable
] أو استخدام أي سلسلة عشوائية. في حال حدوث ذلك، يعرض Chrome
واجهة مستخدم الخطأ مع رسالة خطأ عامة ويرسل الرمز إلى
وحدة التحكّم في حدود الجلسة.
بالنسبة إلى url
، يتم تحديد صفحة ويب قابلة للقراءة من قِبل المستخدمين تتضمّن معلومات عن
الخطأ لتقديم معلومات إضافية عن الخطأ للمستخدمين. يكون هذا الحقل مفعّلاً لأجل المستخدمين لأنّ المتصفّحات لا يمكنها تقديم رسائل خطأ غنية في واجهة مستخدم أساسية. على سبيل المثال، روابط للخطوات التالية ومعلومات الاتصال بخدمة العملاء وما إلى ذلك. إذا أراد المستخدم معرفة المزيد من المعلومات عن تفاصيل الخطأ وكيفية إصلاحه،
يمكنه الانتقال إلى الصفحة المقدَّمة من واجهة مستخدم المتصفّح للحصول على مزيد من التفاصيل. يجب أن يكون عنوان URL
للموقع الإلكتروني نفسه الذي يضم موفِّر الهوية configURL
.
try {
const cred = await navigator.credentials.get({
identity: {
providers: [
{
configURL: 'https://idp.example/manifest.json',
clientId: '1234',
},
],
}
});
} catch (e) {
const code = e.code;
const url = e.url;
}
Auto-Selected Flag API
mediation: optional
هو سلوك التوسّط التلقائي للمستخدمين
في واجهة برمجة التطبيقات Credential Management API، ويؤدي إلى إعادة المصادقة تلقائيًا عند
الإمكان. ومع ذلك، قد تكون إعادة المصادقة التلقائية
غير متاحة لأسباب يعرفها
المتصفح فقط. وعندما تكون غير متاحة، قد يُطلب من المستخدم تسجيل
الدخول من خلال توسّط المستخدم الصريح، وهو مسار يتضمن خصائص مختلفة.
- من وجهة نظر مُستخدِم واجهة برمجة التطبيقات، عندما يتلقّى رمز تعريف، لا يُتاح له معرفة ما إذا كان ذلك نتيجة لعملية إعادة مصادقة تلقائية. ويصعّب ذلك عليهم تقييم أداء واجهة برمجة التطبيقات وتحسين تجربة المستخدم وفقًا لذلك.
- من وجهة نظر موفّر الهوية، لا يمكنه أيضًا معرفة ما إذا حدثت عملية إعادة مصادقة تلقائية أم لا لتقييم الأداء. بالإضافة إلى ذلك،
قد يساعدهم تحديد ما إذا كان هناك توسّط صريح للمستخدم في توفير المزيد من
الميزات المتعلّقة بالأمان. على سبيل المثال، قد يفضّل بعض المستخدمين استخدام مستوى أمان أعلى يتطلّب مشاركة المستخدمين بشكل صريح في المصادقة. إذا تلقّى موفِّر idenaph طلب رمز مميّز بدون هذا التوسّط، يمكنه معالجة
الطلب بشكل مختلف. على سبيل المثال، يمكنك عرض رمز خطأ ليتمكّن موفِّر المحتوى من
طلب بيانات من FedCM API مرة أخرى باستخدام
mediation: required
.
لذلك، سيكون من المفيد للمطوّرين معرفة مسار إعادة المصادقة التلقائية.
باستخدام واجهة برمجة التطبيقات Auto-selected Flag API، يشارك Chrome مع كلّ من موفّر الهوية وموفّر الخدمات ما إذا تم الحصول على إذن صريح من المستخدِم من خلال النقر على الزرّ Continue as (متابعة باسم)، وذلك عند حدوث إعادة مصادقة تلقائية أو حدوث توسّط صريح. ولا تتم المشاركة إلا بعد منح إذن المستخدم للتواصل مع موفِّر الهوية/موفِّر الخدمات.
مشاركة موفِّر الهوية
لمشاركة المعلومات مع موفِّر الهوية بعد الحصول على إذن المستخدم، يُدرِج Chrome
is_auto_selected=true
في طلب POST
المُرسَل إلى
id_assertion_endpoint
:
POST /fedcm_assertion_endpoint HTTP/1.1
Host: idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity
account_id=123&client_id=client1234&nonce=Ct0D&disclosure_text_shown=true&is_auto_selected=true
مشاركة الجهة المحظورة
يمكن للمتصفّح مشاركة المعلومات مع مقدّم الخدمة في isAutoSelected
من خلال
IdentityCredential
:
const cred = await navigator.credentials.get({
identity: {
providers: [{
configURL: 'https://idp.example/manifest.json',
clientId: '1234'
}]
}
});
if (cred.isAutoSelected !== undefined) {
const isAutoSelected = cred.isAutoSelected;
}
التفاعل مع الملاحظات ومشاركتها
إذا كانت لديك ملاحظات أو واجهت أي مشاكل أثناء الاختبار، يمكنك مشاركتها على crbug.com.
صورة من تصوير Girl with red hat على Unsplash