המדריך הזה מספק הנחיות מפורטות ומעשיות להטמעת אימות מאובטח באמצעות מפתחות גישה וניהול פרטי כניסה באפליקציות אינטרנט מודרניות, ללא תלות בסביבת הפיתוח.
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 ממופים למדריכים הבאים:
- רישום מפתח גישה: רישום מפתח גישה – הצעה לרישום מפתח גישה חדש וקידום מכירות.
- יצירה מותנית של מפתח גישה: יצירה מותנית של מפתח גישה (קידום לאחר התחברות) – רישום שקט של מפתחות גישה מיד לאחר התחברות מוצלחת באמצעות סיסמה.
- אימות באמצעות מפתח גישה: אימות באמצעות מפתח גישה – מילוי אוטומטי שניתן לגלות וכניסה באמצעות לחצן.
- כניסות מהירות: כניסות מהירות עם מצב ממשק משתמש מיידי – כניסות לפי הקשר במקום עם מפתחות גישה מקומיים וסיסמאות שמורות לפני הניווט בדף.
- ניהול מפתחות גישה: ניהול מפתחות גישה – סנכרון רשימות, שינויי שמות ומחיקות עם מנהלי סיסמאות.
- אימות מחדש באמצעות מפתח גישה: אימות מחדש באמצעות מפתח גישה – אימות מחדש של משתמשים חוזרים שמחוברים לחשבון, לצורך ביצוע פעולות רגישות.