با استفاده از Signal API، کلیدهای عبور را با اعتبارنامه های سرور خود مطابقت دهید

منتشر شده: ۱۲ نوامبر ۲۰۲۴، آخرین به‌روزرسانی: ۲۹ نوامبر ۲۰۲۴

API سیگنال WebAuthn به طرفین متکی اجازه می‌دهد تا اعتبارنامه‌های موجود را به ارائه‌دهندگان کلید عبور متصل ارسال کنند. این امر به ارائه‌دهنده کلید عبور پشتیبان اجازه می‌دهد تا کلیدهای عبور نادرست یا باطل‌شده را از حافظه خود به‌روزرسانی یا حذف کند تا دیگر به کاربران پیشنهاد نشوند.

سازگاری

کروم از سیگنال API در تمام پلتفرم‌های دسکتاپ و اندروید پشتیبانی می‌کند.

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

مدیر رمز عبور گوگل می‌تواند کلیدهای عبور را برای انعکاس سیگنال به‌روزرسانی کند. ارائه‌دهندگان کلید عبور مبتنی بر افزونه کروم در دسکتاپ تصمیم می‌گیرند که آیا سیگنال را منعکس کنند یا خیر.

پیشینه

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

با این حال، موارد کمی وجود دارد که در آنها ناهماهنگی بین لیست کلید عبور ارائه دهنده و لیست اعتبارنامه‌های سرور می‌تواند باعث سردرگمی شود.

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

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

سیگنال API

API سیگنال یک API احراز هویت وب است که این ناسازگاری‌ها را با اجازه دادن به RPها برای ارسال تغییرات به ارائه‌دهنده‌ی رمز عبور، حل می‌کند. سه روش وجود دارد:

سیگنالی مبنی بر عدم وجود اعتبارنامه

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 می‌تواند به ارائه‌دهنده کلید عبور اطلاع دهد که اعتبارنامه مشخص شده حذف شده یا وجود ندارد. ارائه‌دهنده کلید عبور نحوه برخورد با این سیگنال را تعیین می‌کند، اما کلید عبور مرتبط باید حذف شود تا کاربران سعی نکنند با کلید عبوری که فاقد اعتبارنامه مرتبط است، وارد سیستم شوند.

Browser Support

  • کروم: ۱۳۲.
  • لبه: ۱۳۲.
  • فایرفاکس: پشتیبانی نمی‌شود.
  • سافاری: ۲۶.

Source

این 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() استفاده کنید. شما لیستی از تمام شناسه‌های معتبر اعتبارنامه برای آن کاربر ارائه می‌دهید. ارائه‌دهنده کلید عبور این لیست را با فضای ذخیره‌سازی محلی خود برای آن طرف متکی مقایسه می‌کند. ارائه‌دهنده کلید عبور هر کلید عبوری را که در فضای ذخیره‌سازی خود پیدا کند و در لیست allAcceptedCredentialIds نباشد، به عنوان "پنهان" علامت‌گذاری می‌کند. سیستم دیگر این کلیدهای عبور پنهان را برای ورود یا تکمیل خودکار ارائه نمی‌دهد، اما آنها بلافاصله به طور دائم حذف نمی‌شوند، که در صورت لزوم امکان بازیابی را فراهم می‌کند. برعکس، ارائه‌دهنده کلید عبور، کلیدهای عبور موجود در allAcceptedCredentialIds را که به عنوان "پنهان" علامت‌گذاری شده‌اند، بازیابی می‌کند. این به وب‌سایت شما اجازه می‌دهد کلیدهای عبوری را که به اشتباه پنهان شده‌اند، بازیابی کند.

Browser Support

  • کروم: ۱۳۲.
  • لبه: ۱۳۲.
  • فایرفاکس: پشتیبانی نمی‌شود.
  • سافاری: ۲۶.

Source

این 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 می‌تواند به ارائه‌دهنده کلید عبور، اطلاعات به‌روزرسانی‌شده کاربر را اطلاع دهد. ارائه‌دهنده کلید عبور نحوه مدیریت این سیگنال را تعیین می‌کند، اما باید کلیدهای عبوری که کاربر در اختیار دارد را با اطلاعات جدید کاربر به‌روزرسانی کند.

Browser Support

  • کروم: ۱۳۲.
  • لبه: ۱۳۲.
  • فایرفاکس: پشتیبانی نمی‌شود.
  • سافاری: ۲۶.

Source

این API می‌تواند هنگام به‌روزرسانی نام کاربری یا نام نمایشی کاربر و در هر بار ورود به سیستم ، فراخوانی شود تا ارائه‌دهنده‌ی رمز عبور بتواند این اطلاعات را با سرور همگام‌سازی کند.

پنجره‌ای که هنگام به‌روزرسانی فراداده‌های رمز عبور در مدیریت رمز عبور گوگل در کروم نمایش داده می‌شود.
پنجره‌ای که هنگام به‌روزرسانی فراداده‌های رمز عبور در مدیریت رمز عبور گوگل در کروم نمایش داده می‌شود.

خلاصه

API سیگنال با حذف خطاهای غیرمنتظره ورود به سیستم، به شما کمک می‌کند تا تجربه بهتری از رمز عبور ایجاد کنید. API سیگنال به طرفین متکی اجازه می‌دهد تا فهرست اعتبارنامه‌های موجود و فراداده‌های آنها را ارسال کنند، بنابراین می‌توانند رمزهای عبور را در ارائه‌دهنده رمز عبور همگام‌سازی کنند.

برای کسب اطلاعات بیشتر در مورد کلیدهای عبور، به ورود بدون رمز عبور با کلیدهای عبور مراجعه کنید.