הסבר על מפתחות גישה

תכונות באינטרנט: אימות באינטרנט

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

1. דרישות מוקדמות עיקריות למפתחות גישה

מפתחות הגישה מסתמכים על Web Authentication API‏ (WebAuthn), שמטיל מגבלות אבטחה מחמירות שצריך לעמוד בהן לפני כל ניסיון הטמעה:

  • הקשרים מאובטחים: שיטות WebAuthn‏ (navigator.credentials.create ו-navigator.credentials.get) מוגבלות בקפדנות על ידי הקשרים מאובטחים. האפליקציות חייבות לפעול ב-https:// בסביבת הייצור, או ב-http://localhost לפיתוח מקומי.
  • מזהה של גורם מסתמך (RP): כל פרטי כניסה מקושרים למזהה RP (בעיקרון, שם הדומיין של האפליקציה). מזהה ה-RP שמועבר באפשרויות בצד השרת חייב להתאים לשם הדומיין של המקור הנוכחי או להיות סיומת תקינה שלו (לדוגמה, example.com תקין עבור login.example.com). חוסר התאמה גורם לחריגות SecurityError בצד הלקוח.

2. הסתייגות לגבי חוויית המשתמש של AAGUID

מזהה ייחודי גלובלי של אישור המאמת (AAGUID) הוא מזהה של 128 ביט שמוחזר בנתוני האישור של הרישום, ומייצג את המודל או הספק של המאמת (למשל, מנהל הסיסמאות של Google,‏ iCloud Keychain,‏ 1Password).

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

3. המלצות לספריות מנותקות

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

  • ‫JavaScript/TypeScript: ‏ SimpleWebAuthn‏ (github.com/MasterKale/SimpleWebAuthn)
  • Python‏: py_webauthn‏ (github.com/duo-labs/py_webauthn)
  • ג'אווה: שרת WebAuthn של ג'אווה (github.com/Yubico/java-webauthn-server), WebAuthn4J (github.com/webauthn4j/webauthn4j)
  • ‫‎.NET: ספריית ‎.NET ל-FIDO2‏ (github.com/abergs/fido2-net-lib)
  • Go: ספריית WebAuthn Go‏ (github.com/go-webauthn/webauthn)
  • ‫Ruby‏: WebAuthn Ruby‏ (github.com/cedarcode/webauthn-ruby)
  • ‫PHP: ‏ WebAuthn Framework‏ (github.com/web-auth/webauthn-framework)

4. מטריצת הפניות לתרחישי שימוש

צריך לזהות את תרחיש השימוש המתאים מבין האפשרויות הבאות ולעיין במדריך ההטמעה המלא שלו. לכל תרחיש לדוגמה יש ממשקי API קריטיים (PublicKeyCredential.parseCreationOptionsFromJSON,‏ parseRequestOptionsFromJSON,‏ signalAllAcceptedCredentials,‏ signalCurrentUserDetails,‏ signalUnknownCredential, תהליך בחירת רשת מותנה, טיפול ב-AAGUID וכו') שמתועדים רק במדריך לכל תרחיש לדוגמה. אל תדלגו על שלב האחזור הזה, ואל תחליפו את מעטפות הספרייה של צד שלישי (כמו startAuthentication/startRegistration של SimpleWebAuthn) בלקוח – הפעילו ישירות את ממשקי ה-API המקוריים של דפדפן WebAuthn. ההמלצות לספריות בסעיף 3 רלוונטיות רק לצד השרת (אימות FIDO2 בקצה העורפי).

פרטי ההטמעה הספציפיים של מפתחות הגישה ו-WebAuthn ממופים למדריכים הבאים: