منتشر شده: ۹ مه ۲۰۲۵، آخرین بهروزرسانی: ۲۲ دسامبر ۲۰۲۵
کلیدهای عبور، احراز هویت قوی و مقاوم در برابر فیشینگ ارائه میدهند. با این حال، وادار کردن کاربران به استفاده از آنها میتواند مشکلاتی را ایجاد کند. با ایجاد خودکار کلید عبور، میتوانید در لحظه مناسب برای کاربران خود کلید عبور ایجاد کنید، البته تا زمانی که آنها از قبل رمز عبوری برای سایت شما ذخیره کرده باشند. ایجاد شرطی (Conditional Create) که امکان ایجاد خودکار کلید عبور را فراهم میکند، بخشی از مشخصات WebAuthn است.
چگونه کار میکند؟
برای کمک به کاربران در استفاده راحتتر از کلیدهای عبور، از یک ویژگی WebAuthn API به نام Conditional Create استفاده کنید. Conditional Create به سایت شما اجازه میدهد بدون نیاز به هیچ اقدامی از سوی کاربر، برای او درخواست کلید عبور کند.
این جریان زمانی کار میکند که شرایط زیر برقرار باشد:
- کاربر یک رمز عبور ذخیره شده در مدیر رمز عبور پیشفرض خود دارد.
- رمز عبور اخیراً استفاده شده است. در حالت ایدهآل، بلافاصله پس از ورود موفقیتآمیز مبتنی بر رمز عبور، تابع Conditional Create را فراخوانی کنید.
اگر هر دو شرط برقرار باشد، میتوانید با فراخوانی Conditional Create از مدیر رمز عبور بخواهید که یک کلید عبور برای کاربر ایجاد کند. پس از ایجاد موفقیتآمیز کلید عبور، بسته به مدیر رمز عبور، به کاربر اطلاع داده میشود.
سازگاری
قابلیت Conditional Create توسط مرورگر Safari در macOS و تمام مرورگرهای iOS و همچنین Chrome در دسکتاپ و Chrome در اندروید پشتیبانی میشود.
این پشتیبانی به این معنی است که روی ارائهدهندگان رمز عبور پیشفرض مربوطه کار میکند: iCloud Keychain (Passwords) در Safari در macOS و iOS، و Google Password Manager در Chrome در دسکتاپ و اندروید.
از آنجایی که iOS 18 یا بالاتر و اندروید 14 یا بالاتر از ارائهدهندگان کلید عبور شخص ثالث پشتیبانی میکنند، صرف نظر از مرورگری که کاربر استفاده میکند، پشتیبانی از ایجاد شرطی به ارائهدهنده کلید عبور بستگی دارد. اگر ارائهدهنده کلید عبور انتخاب شده از ایجاد شرطی پشتیبانی نکند، کلید عبور جدیدی ایجاد نخواهد شد.
پیادهسازی ایجاد شرطی
ایجاد خودکار رمز عبور بر اساس یک ویژگی API WebAuthn به نام Conditional Create انجام میشود. اینها درخواستهای معمولی WebAuthn create() با پارامتر mediation تنظیم شده روی "conditional" هستند که مشابه پر کردن خودکار رمز عبور برای درخواستهای get() عمل میکنند.
پس از ورود کاربر با رمز عبور، از گزینه «ایجاد مشروط» استفاده کنید. موفقیتآمیز بودن ایجاد رمز عبور به مدیر رمز عبور و شرایط خاصی که رعایت میشوند بستگی دارد. این شرایط میتواند بسته به مدیر رمز عبور متفاوت باشد و با گذشت زمان تغییر کند. به عنوان مثال، در کروم با مدیر رمز عبور گوگل (GPM)، کاربر باید اخیراً با استفاده از رمز عبور ذخیره شده برای سایت وارد سیستم شده باشد.
اگر مرورگر با موفقیت کلید عبور را ایجاد کند، یک اعتبارنامه کلید عمومی را برمیگرداند. این اعتبارنامه را برای تکمیل ثبتنام و فعالسازی احراز هویت در آینده به بخش مدیریت خود ارسال کنید .
تشخیص ویژگی
شما میتوانید با فراخوانی PublicKeyCredential.getClientCapabilities() تعیین کنید که آیا قابلیت ایجاد شرطی (Conditional Create) در مرورگر موجود است یا خیر. بررسی کنید که آیا شیء برگردانده شده شامل true برای ویژگی conditionalCreate است یا خیر.
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.conditionalCreate) {
// Conditional create is available
}
}
اگر getClientCapabilities در دسترس نباشد، آنگاه Conditional Create نیز در دسترس نخواهد بود.
ایجاد کلید عبور به صورت مشروط
برای ایجاد خودکار رمز عبور، تابع navigator.credentials.create() را فراخوانی کنید، اما با استفاده از mediation: "conditional" مانند زیر.
const cred = await navigator.credentials.create({
publicKey: options,
// Request conditional creation
mediation: 'conditional'
});
شما باید بلافاصله پس از ورود به سیستم کاربری خود، از ایجاد خودکار رمز عبور استفاده کنید تا بهترین شانس را برای برآورده کردن معیارهای مدیر رمز عبور برای ایجاد خودکار داشته باشید.
میتوانید اعتبارنامه کلید عمومی حاصل را برای تأیید و ثبت کلید عبور به سرور ارسال کنید. در سرور، مطمئن شوید که کاربر وارد سیستم شده است.
هشدارها
پیادهسازی Conditional Create به خودی خود دشوار نیست، اما هنگام ادغام این ویژگی در یک سیستم موجود، چندین نکتهی احتیاطی وجود دارد.
نادیده گرفتن حضور کاربر و تأیید کاربر در سرور
پاسخ ثبتنام، هر دو مقدار "User Presence" و "User Verified" را false برمیگرداند، بنابراین سرور باید این پرچمها را در حین تأیید اعتبار نادیده بگیرد .
قبل از انجام ایجاد خودکار رمز عبور، فراخوانی WebAuthn در حال انجام را لغو کنید
وقتی RP انتظار دارد که کاربر با کلید عبور یا رمز عبور وارد سیستم شود، انجام یک get شرطی بهترین انتخاب است . این ممکن است باعث شود که فراخوانی get شرطی قبل از انجام یک create شرطی لغو شود.
برای انجام این کار، باید AbortController استفاده کنید و .abort() را فراخوانی کنید.
// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();
const cred = await navigator.credentials.get({
publicKey: options,
signal: controller.signal,
// Request conditional get
mediation: 'conditional'
});
// Abort the call
controller.abort();
استثنائات را با ظرافت نادیده بگیرید
وقتی ایجاد کلید عبور مشروط انجام میشود، چند مورد وجود دارد که باید استثنائات را نادیده بگیرید:
-
InvalidStateError: یک کلید عبور از قبل در ارائهدهندهی کلید عبور وجود دارد (فراموش نکنید کهexcludeCredentialsرا مشخص کنید). -
NotAllowedError: ایجاد کلید عبور شرایط لازم را ندارد. -
AbortError: فراخوانی WebAuthn لغو شد.
نمایش خطاها در این موارد ممکن است کاربر را گیج کند زیرا مرورگر آنها را بیسروصدا مدیریت میکند: فقط در صورت موفقیت، اعلانی نشان میدهد و خطاها پیامهای قابل مشاهدهای ایجاد نمیکنند.
سیگنال هنگام ثبت ناموفق رمز عبور
وقتی یک کلید عبور ایجاد میشود اما در سرور ثبت نمیشود، کاربر با خطای تلاش برای ورود به سیستم مواجه میشود. این اتفاق زمانی میافتد که لیست کلیدهای عبور بین ارائهدهنده کلید عبور و سرور متناقض باشد.
برای جلوگیری از چنین شرایطی، از API سیگنال برای حفظ ثبات آنها استفاده کنید .
ارتقا از ورودهای بدون رمز عبور پشتیبانی نمیشود
در این مرحله، ایجاد کلید عبور به صورت مشروط، منوط به وارد کردن رمز عبور معتبر توسط کاربر است. این بدان معناست که رویکردهای ورود بدون رمز عبور مانند لینکهای جادویی، تأیید شماره تلفن یا ادغام هویت، این شرط را برآورده نمیکنند.
خلاصه
ایجاد خودکار رمز عبور میتواند پذیرش رمز عبور را در وبسایت شما تسریع کند و به کاربران کمک کند تا کاربران وبسایت شما را به سمت انتقال از رمزهای عبور به یک روش احراز هویت امنتر سوق دهند.
برای کسب اطلاعات بیشتر در مورد کلیدهای عبور، از ورود بدون رمز عبور با کلیدهای عبور شروع کنید.