זיהוי תכונות פשוט יותר של WebAuthn באמצעות getClientCapabilities()‎

פורסם: 15 בינואר 2025

פרוטוקול WebAuthn מספק יכולות ייחודיות כמו אינטראקציה עם Bluetooth עבור פרוטוקול היברידי, תקשורת עם ספקי מפתחות גישה והצעת מפתחות גישה בהשלמה אוטומטית. עם זאת, לקוחות ומאמתים שונים מציעים רמות תמיכה שונות בתכונות של WebAuthn. הפער הזה עלול לפגוע בחוויית המשתמש, ולגרום לכך שחלק מהמשתמשים ייתקלו בשגיאות או שלא יוכלו להשתמש באפשרויות אימות מסוימות. היכולת של מפתחים לקבוע את היכולות של הלקוח מאפשרת להם ליצור תהליכי אימות חזקים יותר שמותאמים לשינויים האלה.

השיטה PublicKeyCredential.getClientCapabilities() מאפשרת לצדדים מסתמכים לקבוע אילו תכונות של WebAuthn נתמכות בדפדפן. השיטה מחזירה הבטחה שמובילה לרשימה של יכולות נתמכות, וכך מאפשרת למפתחים להתאים את תהליכי העבודה ואת חוויית האימות על סמך היכולות הספציפיות של הלקוח.

תאימות

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() הוא WebAuthn API שמאפשר לצדדים נסמכים לקבוע אילו יכולות זמינות. כדי להשתמש ב-API, צריך להפעיל את PublicKeyCredential.getClientCapabilities(). ההבטחה שמוחזרת נפתרת לאובייקט שמכיל יכולות, וכל אחת מהן מציינת את הזמינות שלה באמצעות true או false. אם היכולת היא undefined, יכול להיות שהזמינות שלה לא ידועה.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

הדפדפן יכול ליצור אישור בלי ממשק משתמש מודאלי בולט אם המשתמש כבר הסכים ליצור אישור.

conditionalGet

הדפדפן יכול לבצע אימות על ידי הצגת מפתחות גישה כחלק מתיבת דו-שיח של מילוי אוטומטי, במקום ממשק משתמש מודאלי בולט. הערך הקיים שווה ל-PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

המכשיר יכול להשתמש ב-Bluetooth כדי שהדפדפן יוכל ליצור אישור ולאמת אותו בין מכשירים באמצעות פרוטוקול היברידי. בדרך כלל זה אומר שהדפדפן יכול להציג קוד QR כדי שהמשתמש יוכל לסרוק אותו ולהיכנס לחשבון באמצעות טלפון שיש בו אישור.

passkeyPlatformAuthenticator

הדפדפן יכול ליצור פרטי כניסה ולאמת אותם באמצעות מאמת פלטפורמה שמשתמש מאמת או מכשיר אחר שתומך בכך באמצעות פרוטוקול היברידי. שווה ערך ל-hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

הדפדפן יכול ליצור אישור ולבצע איתו אימות שלא תואם למזהה ה-RP, כל עוד הוא מצוין בקובץ המקורות הקשורים.

signalAllAcceptedCredentials

הדפדפן יכול לאותת לשרת על פרטי הכניסה שזמינים לספק מפתחות הגישה, כדי שספק מפתחות הגישה יוכל לשמור על עקביות בין רשימת מפתחות הגישה לבין השרת.

signalCurrentUserDetails

הדפדפן יכול לשלוח לשרת מידע על המשתמש, כמו שם המשתמש והשם לתצוגה, כדי לספק מפתח גישה, כדי שספק מפתח הגישה יוכל לשמור על עקביות בין פרטי מפתח הגישה לבין השרת.

signalUnknownCredential

הדפדפן יכול לאותת על פרטי כניסה שנמחקו בשרת לספק מפתחות הגישה, כדי שספק מפתחות הגישה יוכל לשמור על עקביות בין רשימת מפתחות הגישה לבין השרת.

userVerifyingPlatformAuthenticator

הדפדפן יכול ליצור פרטי כניסה ולאמת אותם באמצעות אמצעי אימות בפלטפורמה. זה לא אומר שהדפדפן תומך בפרוטוקול ההיברידי. הערך הקיים שווה ל-PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

תוספים

ספקי RP יכולים גם לקבוע אילו תוספים זמינים באמצעות getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

המזהה מתחיל ב-extension: ואחריו שם התוסף. שמות התוספים מפורטים במזהי התוספים של WebAuthn שמוגדרים ב-IANA.

מידע נוסף

למידע נוסף על מפתחות גישה, מומלץ לקרוא את המאמר כניסה ללא סיסמה באמצעות מפתחות גישה.