סיכום
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 סוגים של פרטי כניסה:
PasswordCredentialFederatedCredential
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.