אימות JWT ב-FastAPI
אימות (Authentication) שואל "מי אתה?" הרשאה (Authorization) שואלת "מה אתה יכול לעשות?"
אם תבנו פלטפורמת AI ללא אבטחה, כל אחד יוכל לגשת לנתונים פרטיים. הם יוכלו לשנות פרופילי משתמשים או לצפות בהתקדמות של סטודנטים. עליכם להגן על המשאבים שלכם.
JWT (JSON Web Token) פותר זאת. במקום לשלוח סיסמה עם כל בקשה, המשתמש שולח טוקן (token) מאובטח.
תהליך העבודה:
- רישום משתמש
- יצירת hash לסיסמה
- התחברות ואימות פרטי גישה
- יצירת טוקן JWT
- גישה לנתיבים (routes) מוגנים
כדאי להשתמש בכלים הבאים:
- passlib עם bcrypt עבור hashing של הסיסמה
- python-jose עבור יצירת טוקנים
לעולם אל תשמרו סיסמאות בטקסט גלוי (plain text). אם האקר יגנוב את מסד הנתונים שלכם, הוא יקבל הכל. במקום זאת, שמרו hash.
Hash הופך את "password123" למחרוזת ארוכה של תווים אקראיים. אי אפשר להפוך את ה-hash בחזרה לסיסמה. אתם רק מוודאים אם הקלט תואם ל-hash.
איך לבנות זאת:
רישום המשתמש שולח שם משתמש וסיסמה. אתם מבצעים hashing לסיסמה ושומרים אותה במסד הנתונים שלכם.
התחברות המשתמש שולח פרטי גישה. אתם מוצאים את ה-hash השמור. אתם משתמשים בספרייה כדי לאמת את הסיסמה. אם היא תואמת, אתם יוצרים טוקן.
יצירת JWT טוקן מכיל נתוני משתמש וזמן תפוגה. אתם חותמים על הטוקן באמצעות מפתח סודי (secret key). אם משתמש ינסה לשנות את הנתונים, החתימה תיכשל.
תגובת ההתחברות נראית כך: { "access_token": "eyJhbGciOiJIUzI1Ni...", "token_type": "bearer" }
כעת למשתמש יש מפתח למערכת שלכם.
בחלק הבא, נלמד כיצד להשתמש בטוקנים הללו כדי להגן על נתיבים (routes) ספציפיים ולנהל תפקידי משתמשים (user roles).
סיכום השלבים:
- רישום משתמש
- ביצוע hashing ושמירת הסיסמה
- אימות סיסמה במהלך ההתחברות
- יצירת JWT חתום
מקור: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi