احراز هویت JWT در FastAPI
احراز هویت (Authentication) میپرسد «تو کی هستی؟» تعیین سطح دسترسی (Authorization) میپرسد «چه کاری میتوانی انجام دهی؟»
اگر یک پلتفرم هوش مصنوعی بدون امنیت بسازید، هر کسی میتواند به دادههای خصوصی دسترسی داشته باشد. آنها میتوانند پروفایلهای کاربری را تغییر دهند یا پیشرفت دانشآموزان را مشاهده کنند. شما باید از منابع خود محافظت کنید.
JWT (JSON Web Token) این مشکل را حل میکند. به جای ارسال رمز عبور با هر درخواست، کاربر یک توکن امن ارسال میکند.
گردش کار:
- ثبتنام کاربر
- هش کردن رمز عبور
- ورود و تأیید اعتبار اطلاعات کاربری
- تولید توکن JWT
- دسترسی به مسیرهای محافظتشده
شما باید از این ابزارها استفاده کنید:
passlibبه همراهbcryptبرای هش کردن رمز عبورpython-joseبرای تولید توکن
هرگز رمزهای عبور را به صورت متن ساده (plain text) ذخیره نکنید. اگر هکری پایگاه داده شما را سرقت کند، به همه چیز دسترسی خواهد داشت. در عوض، یک هش ذخیره کنید.
یک هش، عبارت "password123" را به رشتهای طولانی از کاراکترهای تصادفی تبدیل میکند. شما نمیتوانید هش را دوباره به رمز عبور تبدیل کنید. شما فقط تأیید میکنید که آیا ورودی با هش مطابقت دارد یا خیر.
نحوه ساخت آن:
۱. ثبتنام کاربر نام کاربری و رمز عبور را ارسال میکند. شما رمز عبور را هش کرده و آن را در پایگاه داده خود ذخیره میکنید.
۲. ورود کاربر اطلاعات کاربری را ارسال میکند. شما هش ذخیره شده را پیدا میکنید. از کتابخانه برای تأیید رمز عبور استفاده میکنید. اگر مطابقت داشت، یک توکن ایجاد میکنید.
۳. تولید JWT یک توکن شامل دادههای کاربر و زمان انقضا است. شما توکن را با یک کلید مخفی (secret key) امضا میکنید. اگر کاربری سعی کند دادهها را تغییر دهد، امضا نامعتبر خواهد بود.
پاسخ ورود به این شکل است:
{
"access_token": "eyJhbGciOiJIUzI1Ni...",
"token_type": "bearer"
}
اکنون کاربر کلیدی برای ورود به سیستم شما در اختیار دارد.
در بخش بعدی، یاد خواهیم گرفت که چگونه از این توکنها برای محافظت از مسیرهای خاص و مدیریت نقشهای کاربری استفاده کنیم.
خلاصه مراحل:
- ثبتنام کاربر
- هش کردن و ذخیره رمز عبور
- تأیید رمز عبور در هنگام ورود
- تولید JWT امضا شده
Source: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk
Optional learning community: https://t.me/GyaanSetuAi