به‌روزرسانی‌های FedCM: نمایش دامنه iframe

از کروم ۱۴۲، می‌توانید انتخاب کنید که دامنه‌ی iframe در رابط کاربری FedCM نمایش داده شود، زمانی که Relying Party (RP) به عنوان یک iframe شخص ثالث در سایت دیگری تعبیه شده باشد. این ویژگی، شفافیت را برای کاربران هنگام ورود به سرویسی که در وب‌سایت دیگری تعبیه شده است، افزایش می‌دهد.

پیشینه

پیش از این، هنگامی که FedCM از درون یک iframe با مبدا متقابل فراخوانی می‌شد، رابط کاربری پنجره FedCM فقط دامنه سایت سطح بالا را نمایش می‌داد. اگر سرویسی که کاربران با آن تعامل داشتند با سایت سطح بالا متفاوت بود، این امر می‌توانست برای کاربران سردرگمی ایجاد کند. به عنوان مثال، ممکن است کاربر در یک وب‌سایت خبری باشد که یک ویجت نظردهی را تعبیه کرده است. هنگامی که کاربر سعی می‌کند به ویجت نظردهی وارد شود، پنجره FedCM فقط دامنه وب‌سایت خبری را نشان می‌داد، نه دامنه سرویس نظردهی را:

عنوان کادر محاوره‌ای FedCM شامل متن «ورود به سایت خبری.مثال با fedcm-demo-idp.dev» است.
وقتی FedCM از داخل iframe فراخوانی می‌شود، دامنه‌ی iframe در رابط کاربری نمایش داده نمی‌شود.

برای حل این مشکل، کروم اکنون روشی دارد که IdPها می‌توانند علاوه بر دامنه سایت سطح بالا، دامنه iframe که توکن به آن ارسال می‌شود را در کادر محاوره‌ای FedCM نشان دهند. این کار تصویر واضح‌تری از اینکه کدام سرویس‌های شخص ثالث در فرآیند ورود به سیستم دخیل هستند، در اختیار کاربر قرار می‌دهد.

عنوان کادر محاوره‌ای FedCM شامل متن زیر است: «با fedcm-demo-idp.dev وارد news-site.example شوید. news-site.example محتوا را از widget.example جاسازی می‌کند».
وقتی FedCM از درون iframe فراخوانی می‌شود، IdP می‌تواند انتخاب کند که هم iframe و هم دامنه‌های سایت جاسازی‌شده را در کادر محاوره‌ای رابط کاربری نمایش دهد.

پیاده‌سازی

نقطه پایانی ابرداده کلاینت IdP هم یک client_id و هم به صورت اختیاری یک top_frame_origin دریافت می‌کند، برای مثال:

GET /client_metadata_endpoint?client_id=1234&top_frame_origin=https%3A%2F%2Ftop-frame.example HTTP/1.1
Host: idp.example
Origin: https://iframe.example/
Accept: application/json
Sec-Fetch-Dest: webidentity

سپس IdP می‌تواند منطق سفارشی را پیاده‌سازی کند تا مشخص کند که آیا RP و سایت سطح بالا یک طرف هستند یا خیر. اگر RP هم صاحب سایت سطح بالا و هم iframe باشد، IdP می‌تواند فقط دامنه سطح بالا را نمایش دهد، که رفتار پیش‌فرض است. برای نمایش هر دو دامنه، IdP باید ویژگی client_is_third_party_to_top_frame_origin را در پاسخ نقطه پایانی ابرداده کلاینت خود لحاظ کند و مقدار آن را روی true تنظیم کند.

در اینجا مثالی از پاسخ نقطه پایانی ابرداده کلاینت آورده شده است:

// In the client metadata endpoint
const clientIsThirdParty = isClientOriginDifferentFromTopFrame();
responseData = {
  privacy_policy_url: "..."
  terms_of_service_url: "...",
  client_is_third_party_to_top_frame_origin: clientIsThirdParty,
}

وقتی این ویژگی روی true تنظیم شده باشد و RP به عنوان یک iframe در سایت دیگری تعبیه شده باشد، کادر محاوره‌ای FedCM هم دامنه سایت سطح بالا و هم دامنه iframe را نمایش می‌دهد. این کار زمینه بیشتری در مورد درخواست ورود به سیستم در اختیار کاربر قرار می‌دهد.

مقدار پیش‌فرض برای client_is_third_party_to_top_frame_origin برابر با false است، بنابراین پیاده‌سازی‌های موجود تحت تأثیر این تغییر قرار نخواهند گرفت.

جزئیات بیشتر در مستندات مربوط به پیاده‌سازی FedCM روی یک ارائه‌دهنده هویت (Identity Provider) وجود دارد.

امتحانش کن.

می‌توانید یک نسخه آزمایشی (دمو) از این ویژگی را در fedcm-demo-rp.dev/iframe مشاهده کنید. کد مربوطه در مخزن گیت‌هاب نسخه آزمایشی قرار دارد.

ما از بازخورد شما در مورد این و سایر ویژگی‌های FedCM استقبال می‌کنیم. نظرات خود را به اشتراک بگذارید و هرگونه مشکل را در مخزن گیت‌هاب FedCM گزارش دهید.

بیشتر بدانید