به روز رسانی FedCM: Domain Hint API

از Chrome 123، می‌توانید از Domain Hints در کنار API مدیریت اعتبار فدرال (FedCM) استفاده کنید. با Domain Hint API، توسعه‌دهندگان می‌توانند تنها با نشان دادن حساب‌های ورود فدرال از دامنه‌ای که می‌پذیرند، تجربه کاربری بهتری را ارائه دهند.

Domain Hint API

FedCM می‌تواند برای آسان‌تر کردن ورود کاربر به یک طرف متکی (RP، اشاره به یک وب‌سایت) با استفاده از اطلاعات حساب ارائه‌شده توسط یک ارائه‌دهنده هویت (IdP) استفاده شود. با این حال، مواردی وجود دارد که RP از قبل می داند که فقط حساب های مرتبط با یک دامنه خاص مجاز به ورود به سایت هستند. این امر به ویژه در سناریوهای سازمانی که در آن سایت مورد دسترسی محدود به یک دامنه شرکتی است، رایج است. برای ارائه تجربه کاربری بهتر، FedCM API به RP اجازه می‌دهد فقط حساب‌هایی را که ممکن است برای ورود به RP استفاده شوند، نشان دهد. این از سناریوهایی جلوگیری می کند که در آن کاربر سعی می کند با استفاده از حسابی خارج از دامنه شرکتی به RP وارد شود، اما بعداً با یک پیام خطا (یا در مواردی که ورود کار نمی کند خاموش شود) به دلیل استفاده نکردن از نوع درست حساب، به او نمایش داده می شود.

با Domain Hint API، RP ها می توانند ویژگی domainHint را در فراخوانی API FedCM مشخص کنند تا فقط حساب های منطبق را برای کاربر نشان دهد. IdP می‌تواند یک ویژگی domain_hints را به عنوان بخشی از پاسخ از نقطه پایانی فهرست حساب‌ها ارائه کند تا نشان دهد که یک حساب با کدام دامنه(ها) مرتبط است. به این ترتیب، مرورگر می‌تواند حساب‌های منطبق را بدون افشای اشاره دامنه درخواستی به IdP نشان دهد.

یک نمونه پاسخ 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"]
  }]
}

RP می‌تواند navigator.credentials.get() با ویژگی domainHint فراخوانی کند تا حساب‌ها را فیلتر کند. به عنوان مثال، فرض کنید یک کاربر از corp-partner.example بازدید می کند و با حسابی از corp.example وارد سیستم می شود. سایت API را به صورت زیر فراخوانی می کند:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

مقدار domainHint برای فیلتر سمت سرور به نقطه پایانی فهرست حساب‌ها ارسال نمی‌شود، زیرا می‌تواند یک بردار اثر انگشت برای IdP باشد. در عوض، Chrome طبق معمول درخواست FedCM را انجام می‌دهد و حساب‌هایی را که با مقدار domainHint تعیین‌شده توسط فراخوان navigator.credentials.get() مطابقت ندارند فیلتر می‌کند. سپس، کروم گفتگوی FedCM را با لیست حساب های جدید به کاربر نشان می دهد. این رویکرد شبیه به Login Hint API است، اما این دو API به سوالات متفاوتی پاسخ می‌دهند. هدف Login Hint API پاسخ دادن به این سوال است که "یک شناسه برای کاربر مورد نظر من چیست؟"، در حالی که Domain Hint به دنبال پاسخ "این حساب باید متعلق به کدام شرکت یا سرور باشد؟" است.

هنگامی که domainHint: "any" استفاده می شود، Chrome حساب هایی را که هیچ دامنه ای ندارند فیلتر می کند (یعنی domain_hints ارسال نمی شود یا خالی است). به عنوان مثال، این امکان استفاده از مواردی را فراهم می کند که RP فقط به حساب های مدیریت شده در فرآیند ثبت نام خود اجازه می دهد.

وقتی هیچ حسابی با domainHint مطابقت نداشته باشد، کادر گفتگوی FedCM یک اعلان ورود را نشان می‌دهد که به کاربر اجازه می‌دهد به یک حساب IdP مطابق با راهنمایی درخواست شده توسط RP وارد شود. هنگامی که کاربر روی درخواست ضربه می زند، یک پنجره بازشو با URL ورود به سیستم مشخص شده در فایل پیکربندی باز می شود. سپس پیوند با اشاره ورود و پارامترهای پرس و جو اشاره دامنه اضافه می شود.

یک مثال درخواست ورود به سیستم زمانی که هیچ حسابی با domainHint مطابقت نداشته باشد.
یک مثال درخواست ورود به سیستم زمانی که هیچ حسابی با domainHint مطابقت نداشته باشد.