آزمایش مبدأ: میانجیگری فوری WebAuthn برای ورود بدون اصطکاک

تاریخ انتشار: 19 اوت 2025

وساطت فوری WebAuthn یک قابلیت وب جدید است که برای ساده کردن جریان ورود کاربر طراحی شده است. این آزمایش اولیه یک نمای کلی از ویژگی، مزایای آن و جزئیات پیاده‌سازی ارائه می‌کند و از شما دعوت می‌کند تا در شکل‌دهی آینده احراز هویت وب کمک کنید.

پس زمینه

احراز هویت در وب اغلب باعث ایجاد اصطکاک می شود و ورود کاربر را پیچیده می کند. جریان های WebAuthn موجود، اگرچه قدرتمند هستند، اما با دکمه های "ورود به سیستم" مشکل دارند، به خصوص زمانی که اعتبارنامه ها فوراً در دسترس نیستند، که منجر به برگشت فرم های استاندارد می شود.

نمونه ای از جریان میانجیگری فوری

این ویژگی جدید یک جریان ورود به سیستم با اصطکاک کم را ارائه می‌کند، شبیه به APIهای preferImmediatelyAvailableCredentials در تلفن همراه. با کاهش اصطکاک و بهبود تجربه کاربر، ورود به سیستم را، اغلب قبل از فرم‌های استاندارد ورود به سیستم، ساده می‌کند.

چگونه کار می کند

واسطه‌گری فوری WebAuthn تجربه ورود مستقیم‌تر و کارآمدتری را امکان‌پذیر می‌سازد. این به مرورگر اجازه می‌دهد تا فوراً اعتبارنامه‌های موجود را ارائه کند، یا فوراً عدم وجود آنها را بدون درخواست تأیید اعتبار بین دستگاهی یا کلید امنیتی، که اجرای آن را برای توسعه‌دهندگان ساده می‌کند، اعلام کند.

نوع میانجیگری immediate

ما در حال معرفی یک نوع واسطه immediate برای درخواست های navigator.credentials.get() هستیم. وقتی این گزینه تنظیم می شود، اگر اعتبار محلی در دسترس نباشد، قول با NotAllowedError رد می شود. اگر اعتبارنامه وجود داشته باشد، مرورگر فرآیند احراز هویت را به طور معمول انجام می دهد.

این انعطاف‌پذیری به سایت‌ها اجازه می‌دهد تا جریان ورود به سیستم خود را تطبیق دهند و زمانی که اعتبارنامه‌های فوری در دسترس نیستند، روش‌های جایگزین را به‌خوبی ارائه دهند.

نکته مهم این است که مرورگرها همچنان می توانند NotAllowedError برای حفظ حریم خصوصی و امنیت کاربر بازگردانند و از مشکلاتی مانند اثر انگشت یا ردیابی جلوگیری کنند.

تشخیص ویژگی

با استفاده از PublicKeyCredential.getClientCapabilities() می توانید تشخیص دهید که آیا میانجیگری فوری در دسترس است. توسعه دهندگان می توانند قابلیت immediateGet را در شیء capabilities برگشتی بررسی کنند.

async function checkImmediateMediationAvailability() {
  try {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.immediateGet && window.PasswordCredential) {
      console.log("Immediate Mediation with passwords supported.");
    } else if (capabilities.immediateGet) {
      console.log("Immediate Mediation without passwords supported.");
    } else { console.log("Immediate Mediation unsupported."); }
  } catch (error) {
    console.error("Error getting client capabilities:", error);
  }
}

توجه: برای کمک به پشتیبانی گسترده تر مرورگر، یک polyfill برای getClientCapabilities() از مخزن WebAuthn Polyfills GitHub در دسترس است.

اجرای نمونه

برای استفاده از API، navigator.credentials.get() را با mediation: 'immediate' فراخوانی کنید. توصیه می‌کنیم password: true در درخواست اضافه کنید، زیرا اکثر کاربران احتمالاً امروز رمز عبور ذخیره‌شده دارند و می‌توانند فوراً از این تجربه بهره ببرند.

button.addEventListener('click', async (event) => {
  event.preventDefault();
  event.stopPropagation();
  const cred = await navigator.credentials.get({
    password: true,
    publicKey: {
      challenge, // Your server-generated challenge
      rpId: 'example.com' // Your Relying Party ID
    },
    mediation: 'immediate',
  });
});

توسعه‌دهندگان باید NotAllowedError در یک بلوک catch کنترل کنند تا تجربه‌ای عالی برای ورود مجدد به سیستم ارائه دهند.

یک جریان گام به گام برای میانجیگری فوری

میانجی‌گری فوری WebAuthn از دو مورد استفاده اصلی برای ساده‌سازی ورود کاربر پشتیبانی می‌کند: فعال کردن دکمه اختصاصی «ورود با کلید عبور» که گزینه‌های بازگشتی ناخواسته را سرکوب می‌کند و تسهیل یک جریان ورود پویا که اعتبارنامه‌ها را پیش از یک اقدام حیاتی برای کاربر ارائه می‌دهد.

مورد استفاده 1: ورود صریح با دکمه ورود به سیستم

این سناریو بر روی ارائه یک دکمه ورود به سیستم اختصاصی تمرکز می‌کند و از تجربه کاربری تمیز بدون درخواست‌های غیرمنتظره یا عبور از صفحه ورود به سیستم اطمینان می‌دهد.

زمانی که کاربر روی دکمه ورود به سیستم کلیک می‌کند، Chrome اعتبارنامه‌های ذخیره‌شده قبلی را نشان می‌دهد.
  1. کاربر ورود به سیستم را آغاز می کند: کاربر روی دکمه "ورود به سیستم" کلیک می کند. سپس طرف متکی navigator.credentials.get() را با mediation: "immediate" .
  2. درخواست‌های مرورگر برای انتخاب اعتبار (در صورت وجود): مرورگر کلیدهای عبور محلی یا گذرواژه‌های درخواستی را بررسی می‌کند. اگر موردی پیدا کرد، بلافاصله یک رابط کاربری مدال برای انتخاب یک حساب کاربری به کاربر ارائه می دهد. حساب ها بر اساس آخرین مُهر زمانی استفاده شده و سپس بر اساس حروف الفبا رتبه بندی می شوند. توجه : اگر رمز عبور و کلید عبور از چندین مدیر رمز عبور برای یک حساب پیدا شود، مرورگر کلیدهای عبور را در اولویت قرار می دهد. هنگامی که چندین کلید عبور برای یک حساب از ارائه دهندگان مختلف وجود داشته باشد، آخرین کلید عبور استفاده شده در اولویت قرار می گیرد.
  3. ورود موفقیت آمیز: کاربر رمز عبور را از رابط کاربری مرورگر انتخاب می کند. اگر مرورگر به تأیید نیاز داشته باشد، از کاربر می‌خواهد هویت خود را با استفاده از روش تنظیم قبلی خود (مانند پین، ورودی بیومتریک یا الگو) تأیید کند. ورود به سیستم با موفقیت کامل شد.
  4. مسیر بازگشتی: بدون کلید عبور یا حذف کاربر: اگر هیچ رمز عبور محلی یا گذرواژه درخواستی برای سایت در دسترس نباشد، یا اگر کاربر رابط کاربری مرورگر را رد کند، مرورگر یک NotAllowedError را به طرف متکی می‌فرستد و مرورگر هیچ رابط کاربری را برای گزینه‌های بین دستگاهی یا کلید امنیتی نشان نمی‌دهد. سپس طرف متکی می‌تواند صفحه ورود به سیستم استاندارد خود را ادامه دهد یا مکانیزم‌های احراز هویت جایگزین را ارائه دهد.

مورد استفاده 2: جریان ورود ضمنی قبل از اقدام کاربر

این سناریو یک تجربه ورود پیشگیرانه را فعال می‌کند، کلیدهای عبور و گذرواژه‌ها را قبل از انجام عملی که کاربر به وضعیت احراز هویت نیاز دارد، مانند چک کردن، ارائه می‌کند.

زمانی که کاربر اقدامی انجام می‌دهد که نیاز به ورود به سیستم کروم دارد، کروم را نشان می‌دهد.
  1. کاربر اقدامی را آغاز می‌کند که نیاز به ورود به سیستم دارد: کاربر روی دکمه‌ای برای عملی کلیک می‌کند که نیاز به ورود به سیستم دارد (مثلاً دکمه "تسویه حساب"). سپس طرف متکی navigator.credentials.get() را با mediation: "immediate" .
  2. درخواست‌های مرورگر برای انتخاب اعتبار (در صورت وجود): مرورگر کلیدهای عبور یا گذرواژه‌های محلی موجود را بررسی می‌کند. اگر آنها را پیدا کند، بلافاصله یک رابط کاربری مدال برای انتخاب یک حساب کاربری به کاربر ارائه می دهد. حساب‌ها بر اساس آخرین مُهر زمانی رتبه‌بندی می‌شوند، سپس بر اساس حروف الفبا، و برای نشان دادن یک ورودی در هر حساب، حذف می‌شوند. توجه : وقتی رمز عبور و کلید عبور از چندین مدیر رمز عبور برای یک حساب پیدا می‌شود، مرورگر کلیدهای عبور را در اولویت قرار می‌دهد. هنگامی که چندین کلید عبور برای یک حساب از ارائه دهندگان مختلف وجود داشته باشد، آخرین کلید عبور استفاده شده در اولویت قرار می گیرد.

  3. ورود موفقیت آمیز: کاربر یک اعتبارنامه را از رابط کاربری مرورگر انتخاب می کند. اگر مرورگر به تأیید نیاز داشته باشد، از کاربر می‌خواهد هویت خود را با استفاده از روش تنظیم قبلی خود (مانند پین، ورودی بیومتریک یا الگو) تأیید کند. ورود به سیستم با موفقیت کامل شد.

  4. مسیر بازگشتی: بدون اعتبار یا حذف کاربر: اگر اعتبار محلی برای سایت موجود نباشد، یا اگر کاربر رابط کاربری مرورگر را رد کند، مرورگر یک NotAllowedError را به طرف متکی می‌فرستد و مرورگر هیچ رابط کاربری را نشان نمی‌دهد. تجربه ورود به سیستم کاربر از امروز بدون تغییر باقی مانده است. سپس طرف متکی می‌تواند جزئیات بیشتری را از کاربر بخواهد (مثلاً آدرس ایمیل) یا مکانیسم‌های احراز هویت جایگزین مانند فرم رمز عبور، تأیید پیامک یا یک درخواست مدال WebAuthn را نشان دهد که از تأییدکننده‌های بین دستگاهی پشتیبانی می‌کند.

مزایا

میانجیگری فوری WebAuthn چندین مزیت کلیدی را برای توسعه دهندگان و کاربران ارائه می دهد:

  • ورود بدون اصطکاک: برای کاربرانی که کلیدهای عبور یا گذرواژه‌های فوری در دسترس را دارند و در مرورگر یا مدیر رمز عبور خود ذخیره می‌کنند، تجربه ورود نرم‌تر و با اصطکاک کمتری را فراهم می‌کند.
  • ورود به سیستم هوشمند: API یک جریان ورود به سیستم را زمانی فعال می‌کند که کاربر بخواهد فعالیت‌هایی را انجام دهد که نیاز به ورود به سیستم دارند. این موارد به‌طور هوشمندانه با وضعیت اعتبار کاربر سازگار می‌شوند. در صورت امکان، احراز هویت فوری را ارائه می دهد، از تغییر مسیرهای غیر ضروری اجتناب می کند و جریان را ساده می کند.
  • بهبود مدیریت اعتبار : هنگامی که چندین مدیر رمز عبور اعتبارنامه‌هایی را برای یک حساب ارائه می‌دهند، مرورگر هوشمندانه مناسب‌ترین گزینه را انتخاب می‌کند و مدیریت اعتبار را برای کاربران ساده می‌کند.
  • کاهش سردرگمی کاربر: با ارائه مستقیم اعتبارنامه های شناخته شده، این ویژگی سردرگمی کاربر را که اغلب با چندین گزینه ورود به سیستم یا فرم های استاندارد مرتبط است، به حداقل می رساند.
  • بازگشت بدون درز: بازگشت بدون درز به صفحات ورود به سیستم استاندارد را برای کاربران بدون اعتبارنامه فوری تضمین می کند، به این معنی که تجربه آنها نسبت به جریان فعلی بدون تغییر باقی می ماند.

حریم خصوصی و امنیت

میانجی‌گری فوری WebAuthn سایت‌ها را قادر می‌سازد تا قبل از اینکه کاربر صریحاً مجوز ورود به سیستم را صادر کند، وجود اعتبارنامه‌های در دسترس را شناسایی کنند. برای محافظت از حریم خصوصی کاربر و جلوگیری از سوء استفاده احتمالی، چندین اقدام حیاتی را اجرا می کنیم:

  • الزامات اشاره کاربر: تماس API به یک اشاره کاربر (هر گونه فعال سازی موقت کاربر) نیاز دارد. این امر کاوش و انگشت نگاری بی صدا را برای سایت ها دشوار می کند.
  • جلسات ناشناس و خصوصی: در جلسات ناشناس یا خصوصی، هر درخواست میانجیگری فوری NotAllowedError ارسال می کند.
  • محدودیت در لیست های allowCredentials : درخواست هایی که از لیست های allowCredentials استفاده می کنند NotAllowedError نشان می دهند. این مانع از استنباط سایت‌ها از تاریخچه تعامل کاربر یا ردیابی کاربران در طول جلسات می‌شود.
  • لغو: تنظیم پارامتر signal در یک درخواست با میانجیگری فوری نامعتبر است. این از سایت‌ها جلوگیری می‌کند که از نظر برنامه‌ریزی هر رابط کاربری مرورگر را رد کنند.

آن را امتحان کنید

ما شما را تشویق می کنیم که با واسطه گری فوری WebAuthn آزمایش کنید.

وضعیت در کروم

این ویژگی در چرخه توسعه Chromium در حال پیشرفت است:

  • دسک‌تاپ: نسخه آزمایشی توسعه‌دهنده در کروم 136، با نسخه آزمایشی مبدا از کروم 139 تا 141.
  • اندروید: نسخه آزمایشی Dev در کروم 140.

برای تست محلی

برای آزمایش میانجیگری فوری WebAuthn به صورت محلی:

  1. دانلود Chrome 139: آخرین نسخه Chrome را در دسکتاپ خود دریافت کرده و باز کنید.
  2. فعال کردن پرچم میانجی فوری: به chrome://flags/#web-authentication-immediate-get در نوار آدرس بروید و پرچم «دریافت فوری تأیید اعتبار وب» را فعال کنید.
  3. اعتبارنامه را آماده کنید: مطمئن شوید که کلیدهای عبور و رمزهای عبور قابل استفاده را ذخیره کرده اید:
    • گذرواژه‌های ذخیره شده در Google Password Manager.
    • کلیدهای عبور ذخیره شده در Google Password Manager (نیاز به ورود به سیستم و همگام سازی Chrome با یک حساب Google)، Windows Hello یا iCloud keychain.

برای آزمایش عمومی (آزمایش اولیه)

برای آزمایش میانجیگری فوری WebAuthn با آزمایش مبدا در یک محیط عمومی:

  1. ثبت نام: از صفحه آزمایشی اصلی Chrome دیدن کنید و برای آزمایشی "واسطه فوری WebAuthn" ثبت نام کنید.
  2. افزودن نشانه به سرصفحه‌های HTTP: رمز اولیه آزمایشی ارائه شده را در سرصفحه‌های HTTP سایت خود قرار دهید: HTML Origin-Trial: [YOUR_TRIAL_TOKEN]

توجه: شما همچنین می توانید توکن های خود را به صورت برنامه نویسی با جاوا اسکریپت ارائه دهید .

سناریوهای تست

ما یک پیاده سازی مرجع ارائه می دهیم و شما را تشویق می کنیم تا نمونه اولیه خود را برای آزمایش سناریوهای مختلف بسازید.

  • نسخه ی نمایشی مرجع: می توانید پیاده سازی مرجع را در https://deephand.github.io/webauthn-immediate-demo/ امتحان کنید.
    • پیاده سازی نمونه اولیه: هنگام پیاده سازی یک نمونه اولیه در سایت خود، مطمئن شوید که پس از کلیک کاربر (به عنوان مثال، دکمه "ورود به سیستم" یا هر تعاملی که نیاز به ورود کاربر به سیستم دارد، فراخوانی navigator.credentials.get() را با mediation: 'immediate' " انجام می دهید.
  • جریان 1: بدون رمز عبور یا کلید عبور وارد شوید: اگر هیچ رمز عبور یا گذرواژه‌ای برای سایت ندارید، با کلیک بر روی "ورود به سیستم" مستقیماً به صفحه ورود به سیستم استاندارد شما منتهی می‌شود، بدون اینکه رابط کاربری مرورگر ظاهر شود.
  • جریان 2: با یک کلید عبور محلی که فوراً در دسترس است وارد شوید: اگر یک کلید عبور ذخیره شده برای سایت دارید، با کلیک بر روی "ورود به سیستم" باید رابط کاربری میانجی فوری را فعال کنید و کلید عبور را برای انتخاب ارائه دهید.
  • جریان 3: با یک رمز عبور یا رمز عبور محلی وارد شوید: اگر هم رمز عبور و هم گذرواژه را ذخیره کرده اید، گزینه "درخواست رمز عبور" را فعال کنید (با تنظیم password: true در کد خود). با کلیک بر روی "ورود به سیستم" باید هر دو گزینه رمز عبور و رمز عبور در رابط کاربری میانجی فوری ارائه شود.