توی این مقاله با جنگو رست آشنا شدیم و فهمیدیم که چطور داده ها رو سریالایز میکنه. اما اینجا یه سوال پیش میاد: آیا قراره هر کسی بتونه به Api ما دسترسی داشته باشه و اطلاعات رو ببینه و تغییر بده؟
تصور کن یک اپلیکیشن فروشگاهی داری، قطعا دوست نداری یک کاربر معمولی بتونه لیست سفارشات بقیه رو ببینه یا قیمت محصولات رو تغییر بده. اینجاست که بحث امنیت و احراز هویت (Authentication) وسط میاد.
احراز هویت (Authentication) چیست؟
احراز هویت (Authentication) دروازه ورود کاربران به سیستم شماست. در دنیای Django Rest Framework (DRF)، این مکانیسم تعیین میکنه کاربری که در حال ارسال یک درخواست (Request) است، دقیقا چه کسی است.
به زبان ساده احراز هویت برای اینه که سیستم بفهمه : "تو کی هستی"
تفاوت مفهوم احراز هویت (Authentication) با مجوز دسترسی (Permissions) :
-
Authentication: پاسخ به سوال "شما کی هستید؟"
-
Permission: پاسخ به سوال "آیا اجازه انجام این کار را دارید؟"
جنگو رست فریمورک چندین روش استاندارد برای شناسایی کاربر در اختیارمون میزاره که بسته به نیاز پروژه میتونیم ازشون استفاده کنیم.
انواع روش های احراز هویت در Django Rest Framework
1.Basic Authentication : این ساده ترین روش ممکنه، کاربر باید همراه درخواستی که به سرور میفرسته، نام کاربری و رمز عبورش رو هم بفرسته.
مزیت: پیاده سازیش خیلی راحته.
ایراد: اصلا امن نیست مگه اینکه روی HTTPS باشه ، و چون کاربر برای هر درخواستی باید مدام نام کاربری و رمز عبورش رو بفرسته اصلا تجربه کاربری خوبی نداره.
کاربرد: بیشتر برای تست کردن Api در محیط توسعه استفاده میشه.
۲.Session Authentication : این روش دقیقا همون روشیه که خود جنگو برای لاگین کردن توی سایت ها استفاده میکنه ،سرور یک SessionID براش میسازه و توی مرورگر ذخیره میکنه.
کاربرد : اگه میخای از Api برای یک وبسایت استفاده کنی که فرانت اند و بک اندش روی یک دامین هستن (مثلا استفاده از AJAX توی صفحات خود جنگو)، این بهترین گزینست.
۳.Token Authentication : یکی از محبوب ترین روش های برای اپلیکیشن های موبایل و فرانت های جدا (مثل React و Vue) هست .
چطور کار میکنه؟
۱. کاربر یک بار نام کاربری و رمز عبورش رو میفرسته.
۲. سرور چک میکنه و اگر درست بود، یک رشته متنی طولانی و منحصر به فرد به اسم Token تولید میکنه و به کاربر میده (مثلا: 9944b09199c62bcf9418ad846dd0e4a5163591d6).
۳. حالا کاربر برای درخواست های بعدی، دیگه رمز عبور نمیفرسته، فقط این توکن رو توی هدر (Header) درخواستش میزاره.
مزیت : خیلی سبکه ، امنیت خوبی داره و سرور رو درگیر نگهداری سشن های پیچیده نمیکنه.
۴.JWT (Json Web Token) : پکیج JWT به صورت پیش فرض توی هسته جنگو رست نیست (و باید پکیج SimpleJWT رو نصب کنید)، اما الان استاندارد ترین روش احراز هویت مدرنه. تفاوتش با روش Token معمولی اینه که اطلاعات کاربر (مثل id یا ایمیل) به صورت رمزنگاری شده داخل خود توکن قرار میگیره و سرور حتی نیاز نداره برای چک کردن توکن به دیتابیس مراجعه کنه. این یعنی سرعت بالاتر!
چطور احراز هویت را فعال کنیم؟
برای اینکه به جنگو رست بگیم از کدوم روش استفاده کنه ، باید توی فایل settings.py پروژه، تنظیمات زیر رو اضافه کنیم:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
}
با این تنظیمات، جنگو رست اول چک میکنه ببینه کاربر توکن فرستاده؟ اگه نه، چک میکنه ببینه سشن فعال داره؟ و اگه هیچکدوم نبود، کاربر رو به عنوان "ناشناس" (Anonymous) در نظر میگیره.
جمع بندی
انتخاب روش احراز هویت کاملاً به معماری پروژه شما بستگی داره:
-
اگر فرانت و بک اند یکی هستند: SessionAuthentication
-
اگر اپلیکیشن موبایل دارید: TokenAuthentication یا JWT
-
اگر فقط در حال تست هستید: BasicAuthentication
با درک درست این لایه امنیتی، میتونید مطمئن بشید که داده های حساس اپلیکیشن شما فقط در دسترس کاربران مجاز قرار میگیرد.
نظرات کاربران (0)