בדיקת זיהוי תכונות של Credential Management API

סיכום

WebAuthn עוזר לשפר את האבטחה על ידי הוספת אימות שמבוסס על פרטי כניסה עם מפתח ציבורי לאינטרנט, ובקרוב תהיה תמיכה בו ב-Chrome, ב-Firefox וב-Edge (עם המפרט המעודכן). היא מוסיפה סוג חדש של אובייקט Credential, אבל עלולה לשבש אתרים שמשתמשים ב-Credential Management API בלי לזהות את סוגי פרטי הכניסה הספציפיים שבהם הם משתמשים.

אם אתם עושים את זה כרגע כדי לזהות תכונות,

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
    // use CM API
}

מה כן לעשות

if (window.PasswordCredential || window.FederatedCredential) {
    // Call navigator.credentials.get() to retrieve stored
    // PasswordCredentials or FederatedCredentials.
}

if (window.PasswordCredential) {
    // Get/Store PasswordCredential
}

if (window.FederatedCredential) {
    // Get/Store FederatedCredential
}

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
    // Call navigator.credentials.preventSilentAccess()
}

כדוגמה, אפשר לעיין בשינויים שבוצעו בקוד לדוגמה.

כדאי להמשיך לקרוא כדי לקבל מידע נוסף.

מה זה Credential Management API

‫Credential Management API (CM API) מאפשר לאתרים גישה פרוגרמטית למאגר פרטי הכניסה של סוכן המשתמש, כדי לאחסן או לאחזר את פרטי הכניסה של המשתמש למקור הקריאה החוזרת.

ממשקי ה-API הבסיסיים הם:

  • navigator.credentials.get()
  • navigator.credentials.store()
  • navigator.credentials.create()
  • navigator.credentials.preventSilentAccess()

המפרט המקורי של CM API מגדיר 2 סוגים של פרטי כניסה:

  • PasswordCredential
  • FederatedCredential

PasswordCredential הוא פרטי כניסה שמכילים את מזהה המשתמש והסיסמה. ה-FederatedCredential הוא פרטי כניסה שמכילים את מזהה המשתמש ומחרוזת שמייצגת ספק זהויות.

בעזרת 2 פרטי הכניסה האלה, אתרים יכולים:

  • לאפשר למשתמשים להיכנס באמצעות פרטי כניסה מאוחדים או פרטי כניסה מבוססי-סיסמה שנשמרו בעבר, ברגע שהם מגיעים לאתר (כניסה אוטומטית).
  • לאחסן את פרטי הכניסה המאוחדים או מבוססי הסיסמה שהמשתמש נכנס איתם לחשבון,
  • לעדכן את פרטי הכניסה של המשתמש (למשל, אחרי שינוי סיסמה)

מה זה WebAuthn

‫WebAuthn (אימות אינטרנט) מוסיף פרטי כניסה של מפתח ציבורי ל-CM API. לדוגמה, הוא מספק לאתרים דרך סטנדרטית להטמיע אימות דו-שלבי באמצעות מכשירי אימות שתואמים ל-FIDO 2.0.

ברמה הטכנית, WebAuthn מרחיב את CM API באמצעות הממשק PublicKeyCredential.

מה הבעיה?

בעבר, הנחינו את המפתחים לזהות את התכונה של CM API באמצעות הקוד הבא:

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
  // Use CM API
}

But as you can see from the descriptions above, the `navigator.credentials` is
now expanded to support public-key credentials in addition to password
credentials and federated credentials.

The problem is that user agents don't necessarily support all kinds of
credentials. If you continue feature detect using `navigator.credentials`, your
website may break when you are using a certain credential type not supported by
the browser.

**Supported credential types by browser<s**
table class="properties with-head><ing-t><in>t<&q><uot>;<tb>odytr
th/th
thPasswordCredential / Feder<ate>d<Cr>edential/th
thPubli<cKe>y<Cre><de><nt>ial/th
</tr><tr>thChrome
/<tht><dA>vailable
/tdtdI<n d><eve><lo><pm>ent
/td/<trt><rt>hFir<efo><x<>/span>
/thtdN/A
/tdtdAiming <to ><shi><p ><on> 60
/<td/><tr>trth<Edg><e<>/span>
/thtdN/A
/tdtdImp<lemented with a href="https://blogs.windows.com/msedgedev/2016/04/12/a-world-without-passwords-windows-hello->in-micros<of>t-edge/"older API/a. New API (navigator.cr<ede><nti><als) c><oming >soon.
/td/tr/tbody/table


## The solution
You can avoid this by modifying feature detection code as follows to explicitly
test for the credential type that you intend to use.

```js
if (window.PasswordCredential || window.FederatedCredential) {
    // Call navigator.credentials.get() to retrieve stored
    // PasswordCredentials or FederatedCredentials.
}

if (window.PasswordCredential) {
    // Get/Store PasswordCredential
}

if (window.FederatedCredential) {
    // Get/Store FederatedCredential
}

if&& (navigator.credentials  navigator.credentials.preventSilentAccess) {
    // Call navigator.credentials.preventSilentAccess()
}

כאן אפשר לראות את השינויים שבוצעו בפועל בקוד לדוגמה.

כדי לזהות אם PublicKeyCredential נוסף ב-WebAuthn:

if (window.PublicKeyCredential) {
    // use CM API with PublicKeyCredential added in the WebAuthn spec
}

ציר הזמן

ההטמעה המוקדמת ביותר של WebAuthn היא ב-Firefox, והיא צפויה להיות יציבה בתחילת מאי 2018.

בסיום

אם יש לכם שאלות, אתם יכולים לשלוח אותן אל ‎@agektmr או אל agektmr@chromium.org.