تاریخ انتشار: 12 نوامبر 2024
WebAuthn Signal API به طرف های متکی اجازه می دهد تا اعتبارنامه های موجود را به ارائه دهندگان رمز عبور متصل ارسال کنند. با این کار، یک ارائهدهنده رمز عبور پشتیبانی میتواند رمزهای عبور نادرست یا لغو شده را از حافظه خود بهروزرسانی یا حذف کند تا دیگر به کاربران ارائه نشوند.
سازگاری
Chrome روی دسکتاپ از Signal API از Chrome 132 پشتیبانی میکند. Google Password Manager میتواند کلیدهای عبور منعکسکننده سیگنال را بهروزرسانی کند. برای ارائه دهندگان رمز عبور مبتنی بر افزونه کروم، این به آنها بستگی دارد که سیگنال را منعکس کنند یا خیر.
پشتیبانی Chrome در Android بعداً ارائه می شود.
سافاری پشتیبانی می شود اما هنوز اجرا نشده است. فایرفاکس هنوز نظرات خود را به اشتراک نگذاشته است .
پس زمینه
هنگامی که یک رمز عبور ( یک اعتبار شناسایی قابل کشف ) ایجاد می شود، ابرداده هایی مانند یک نام کاربری و یک نام نمایشی به همراه کلید خصوصی در ارائه دهنده کلید عبور (مانند مدیر رمز عبور) ذخیره می شوند، در حالی که اعتبار کلید عمومی در اطلاعات طرف متکی ذخیره می شود. سرور (RP's). ذخیره نام کاربری و نام نمایشی به کاربر کمک می کند تا تشخیص دهد که در صورت درخواست با کدام یک از کلیدهای عبور ارائه شده به سیستم وارد شود. این به ویژه زمانی مفید است که آنها بیش از دو کلید عبور از ارائه دهندگان رمز عبور مختلف داشته باشند.
با این حال، چند مورد وجود دارد که ناسازگاری بین لیست رمز عبور ارائه دهنده کلید عبور و لیست اعتبار سرور می تواند منجر به سردرگمی شود.
اولین مورد زمانی است که کاربر یک اعتبار روی سرور را حذف می کند و کلید عبور را در ارائه دهنده رمز عبور دست نخورده می گذارد. دفعه بعد که کاربر سعی می کند با یک رمز عبور وارد سیستم شود، آن رمز عبور همچنان توسط ارائه دهنده رمز عبور به کاربر ارائه می شود. با این حال، تلاش برای ورود به سیستم ناموفق خواهد بود زیرا سرور نمی تواند با کلید عمومی که حذف شده است تأیید کند.
مورد دوم زمانی است که کاربر نام کاربری یا نام نمایشی خود را در سرور به روز می کند. دفعه بعد که کاربر سعی میکند وارد سیستم شود، کلید عبور در ارائهدهنده رمز عبور همچنان نام کاربری و نام نمایشی قدیمی را با وجود بهروزرسانی در سرور به نمایش میدهد. در حالت ایده آل باید همگام باشند.
سیگنال API
Signal API یک WebAuthn API است که این ابهامات را با اجازه دادن به RPها برای سیگنال دادن تغییرات به ارائهدهنده کلید عبور برطرف میکند. سه روش وجود دارد:
-
PublicKeyCredential.signalUnknownCredential
: علامتی مبنی بر وجود نداشتن اعتبار -
PublicKeyCredential.signalAllAcceptedCredentials
: به لیستی از اعتبارنامه های ذخیره شده علامت بزنید -
PublicKeyCredential.signalCurrentUserDetails
: نام کاربری و/یا نام نمایشی به روز شده را علامت بزنید
نشان می دهد که یک اعتبارنامه وجود ندارد
const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();
const result = await fetch('/login', { ... });
// Detect authentication failure due to lack of the credential
if (result.status === 404) {
// Feature detection
if (PublicKeyCredential.signalUnknownCredential) {
await PublicKeyCredential.signalUnknownCredential({
rpId: "example.com",
credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
});
} else {
// Encourage the user to delete the passkey from the password manager nevertheless.
...
}
}
با فراخوانی PublicKeyCredential.signalUnknownCredential()
با شناسه RP و شناسه اعتبار، RP می تواند به ارائه دهنده کلید عبور اطلاع دهد که اعتبار مشخص شده حذف شده یا وجود ندارد. نحوه برخورد با این سیگنال بستگی به ارائهدهنده رمز عبور دارد، اما انتظار میرود که کلید عبور مرتبط حذف شود تا کاربر با کلید عبور وارد سیستم نشود زیرا اعتبار مرتبط وجود ندارد.
این API را می توان زمانی فراخوانی کرد که ورود به سیستم مبتنی بر رمز عبور به دلیل عدم وجود اعتبار ناموفق باشد . به این ترتیب، RP می تواند از تلاش کاربر برای ورود به سیستم با کلید عبوری که دارای اعتبار مرتبط نیست جلوگیری کند. برخلاف signalAllAcceptedCredentials
، این روش نیازی به پاس کردن کل لیست شناسههای اعتبار ندارد، بنابراین باید هر زمان که کاربر احراز هویت نشد استفاده شود تا تعداد کلیدهای عبور برای یک کاربر مشخص نشود.
به لیستی از اعتبارنامه های ذخیره شده علامت بزنید
// After a user deletes a passkey or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalAllAcceptedCredentials) {
await PublicKeyCredential.signalAllAcceptedCredentials({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
allAcceptedCredentialIds: [ // A list of base64url encoded credential IDs
"vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
...
]
});
}
با فراخوانی PublicKeyCredential.signalAllAcceptedCredentials()
با شناسه RP، شناسه کاربری و لیستی از شناسه اعتبار اطلاعات ذخیره شده، RP می تواند ارائه دهنده رمز عبور را از اعتبار باقیمانده در فضای ذخیره سازی خود مطلع کند. نحوه برخورد با این سیگنال به ارائهدهنده رمز عبور بستگی دارد، اما انتظار میرود کلیدهای عبوری که با این لیست مطابقت ندارند حذف شوند تا کاربر کلیدهای عبوری را در ورود به سیستم که اعتبار مربوط به آنها وجود ندارد، ببیند.
این API باید زمانی فراخوانی شود که کاربر یک کلید عبور را در RP و در هر ورود به سیستم حذف میکند، به طوری که ارائهدهنده کلید عبور میتواند فهرستی هماهنگ از کلیدهای عبور را نگه دارد.
نام کاربری و نام نمایشی به روز شده را علامت بزنید
// After a user updated their username and/or display name
// or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
await PublicKeyCredential.signalCurrentUserDetails({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
name: "a.new.email.address@example.com", // username
displayName: "J. Doe"
});
} else {
}
با فراخوانی PublicKeyCredential.signalCurrentUserDetails()
با شناسه RP، شناسه کاربری، نام کاربری و نام نمایشی، RP می تواند ارائه دهنده کلید عبور را از اطلاعات کاربر به روز شده مطلع کند. نحوه برخورد با این سیگنال بستگی به ارائهدهنده رمز عبور دارد، اما انتظار میرود کلیدهایی که کاربر در اختیار دارد با اطلاعات کاربر جدید بهروزرسانی شود.
وقتی نام کاربری یا نام نمایشی کاربر بهروزرسانی میشود و در هر ورود به سیستم میتوان این API را فراخوانی کرد تا ارائهدهنده کلید عبور بتواند این اطلاعات را با سرور همگامسازی کند.
خلاصه
Signal API به شما کمک می کند تا با حذف احتمال شکست غیرمنتظره ورود به سیستم، تجربه رمز عبور بهتری ایجاد کنید. با Signal API، طرفهای متکی میتوانند فهرستی از اعتبارنامههای موجود و ابردادههایشان را علامتگذاری کنند، بنابراین میتوانند کلیدهای عبور را در ارائهدهنده کلید عبور همگامسازی کنند.
برای کسب اطلاعات بیشتر در مورد کلیدهای عبور، از ورود بدون رمز عبور با کلیدهای عبور شروع کنید.