آنچه در این مقاله میخوانید [پنهانسازی]
تفاوت Authentication و Authorization در این است که Authentication مشخص میکند کاربر چه کسی است، اما Authorization مشخص میکند آن کاربر به چه منابع و قابلیتهایی دسترسی دارد. این دو مفهوم از مهمترین بخشهای امنیت نرم افزار هستند و بسیاری از برنامه نویسان تازه کار آنها را با یکدیگر اشتباه میگیرند. درک درست تفاوت این دو مفهوم برای طراحی سیستم های امن و مدیریت دسترسی کاربران ضروری است.
سرفصل های مقاله
- Authentication چیست؟
- Authentication چگونه کار میکند؟
- هدف اصلی Authentication
- Authorization چیست؟
- Authorization چگونه کار میکند؟
- مثال ساده از Authentication و Authorization
- مهمترین تفاوت Authentication و Authorization
- تفاوت Authentication و Authorization از نظر عملی
- Authentication در پروژههای Backend
- Session Authentication
- JWT Authentication
- Authorization در پروژههای واقعی
- Role Based Access Control
- مثال RBAC
- Permission Based Authorization
- خطاهای رایج در Authentication
- ذخیره رمز عبور به صورت ساده
- استفاده از رمزهای ضعیف
- نداشتن Multi Factor Authentication
- خطاهای رایج در Authorization
- اعتماد به Frontend
- بررسی نکردن Permission در API
- استفاده از Roleهای بیش از حد
- Authentication و Authorization در Django
- Authentication و Authorization در APIها
- چرا درک تفاوت این دو مهم است؟
- جمع بندی
Authentication چیست؟
Authentication به فرآیند احراز هویت کاربر گفته میشود.
هدف آن پاسخ دادن به این سوال است:
«آیا این کاربر واقعا همان فردی است که ادعا میکند؟»
در این مرحله سیستم هویت کاربر را بررسی میکند.
مثلا:
- ورود با نام کاربری و رمز عبور
- ورود با کد یکبار مصرف
- ورود با Google Login
- ورود با اثر انگشت
- ورود با Face ID
همگی نمونههایی از Authentication هستند.
Authentication چگونه کار میکند؟
فرض کنید کاربر اطلاعات زیر را وارد میکند:
username: ali
password: 123456
سیستم اطلاعات را بررسی میکند.
اگر اطلاعات معتبر باشند:
Authentication Successful
وارد حساب کاربری میشود.
در غیر این صورت دسترسی رد میشود.
هدف اصلی Authentication
Authentication فقط یک سوال را پاسخ میدهد:
«این کاربر چه کسی است؟»
در این مرحله هنوز مشخص نیست کاربر چه مجوزهایی دارد.
تنها هویت او تایید میشود.
Authorization چیست؟
Authorization به فرآیند تعیین سطح دسترسی کاربران گفته میشود.
بعد از اینکه کاربر شناسایی شد، سیستم بررسی میکند چه کارهایی میتواند انجام دهد.
در واقع پاسخ این سوال را میدهد:
«کاربر به چه چیزی دسترسی دارد؟»
Authorization چگونه کار میکند؟
فرض کنید کاربر وارد پنل شده است.
سیستم بررسی میکند:
- آیا اجازه مشاهده گزارشها را دارد؟
- آیا اجازه حذف کاربران را دارد؟
- آیا اجازه تغییر تنظیمات را دارد؟
- آیا اجازه مدیریت محصولات را دارد؟
اگر مجوز لازم وجود نداشته باشد، دسترسی رد میشود.
مثال ساده از Authentication و Authorization
فرض کنید وارد یک شرکت میشوید.
نگهبان کارت شناسایی شما را بررسی میکند.
این مرحله:
Authentication
است.
بعد از ورود، سیستم مشخص میکند:
- به کدام اتاقها دسترسی دارید
- چه بخشهایی برای شما مجاز هستند
این مرحله:
Authorization
است.
مهمترین تفاوت Authentication و Authorization
Authentication قبل از Authorization انجام میشود.
ابتدا باید هویت کاربر مشخص شود.
سپس سطح دسترسی او بررسی شود.
به همین دلیل معمولا ترتیب اجرای آنها به شکل زیر است:
Authentication
↓
Authorization
بدون Authentication امکان Authorization وجود ندارد.
تفاوت Authentication و Authorization از نظر عملی
Authentication:
- احراز هویت
- شناسایی کاربر
- ورود به سیستم
- بررسی اعتبار هویت
Authorization:
- تعیین دسترسی
- کنترل مجوزها
- مدیریت نقشها
- محدود کردن عملیات
Authentication در پروژههای Backend
در Backend معمولا از روشهای مختلفی برای احراز هویت استفاده میشود.
مثلا:
- Session Authentication
- JWT Authentication
- OAuth2
- API Key
- Token Authentication
هر کدام کاربرد خاص خود را دارند.
Session Authentication
در این روش بعد از Login:
- Session ایجاد میشود
- شناسه Session داخل Cookie ذخیره میشود
- کاربر شناسایی میشود
این روش در Django بسیار رایج است.
JWT Authentication
در این روش سرور Token تولید میکند.
مثلا:
eyJhbGciOiJIUzI1Ni...
کاربر در درخواستهای بعدی همین Token را ارسال میکند.
سرور از روی آن هویت کاربر را تشخیص میدهد.
Authorization در پروژههای واقعی
Authorization معمولا بر اساس:
- Role
- Permission
- Policy
مدیریت میشود.
Role Based Access Control
یکی از رایجترین مدل ها RBAC است.
مثلا:
Admin
Manager
User
Editor
هر نقش سطح دسترسی متفاوتی دارد.
مثال RBAC
فرض کنید:
Admin:
- حذف کاربر
- مدیریت سیستم
- مشاهده همه اطلاعات
Editor:
- ویرایش محتوا
- انتشار مقاله
User:
- مشاهده اطلاعات شخصی
این ساختار نوعی Authorization است.
Permission Based Authorization
در این روش به جای نقش، مجوزهای مشخص تعریف میشوند.
مثلا:
create_post
delete_post
edit_post
view_report
هر کاربر مجموعهای از Permissionها را دریافت میکند.
خطاهای رایج در Authentication
ذخیره رمز عبور به صورت ساده
مثلا:
password = "123456"
این روش بسیار خطرناک است.
باید از Hash استفاده شود.
استفاده از رمزهای ضعیف
رمزهای ساده باعث افزایش احتمال نفوذ میشوند.
مثلا:
123456
password
admin
انتخابهای مناسبی نیستند.
نداشتن Multi Factor Authentication
برای سیستمهای حساس بهتر است از:
- OTP
- Authenticator
- SMS Verification
استفاده شود.
خطاهای رایج در Authorization
اعتماد به Frontend
بعضی توسعه دهندهها فقط در رابط کاربری دسترسی را محدود میکنند.
مثلا دکمه حذف را مخفی میکنند.
اما Backend همچنان عملیات حذف را انجام میدهد.
این روش ناامن است.
بررسی نکردن Permission در API
مثلا:
delete_user()
بدون بررسی سطح دسترسی اجرا شود.
این موضوع میتواند منجر به دسترسی غیر مجاز شود.
استفاده از Roleهای بیش از حد
گاهی تعداد Roleها بیش از حد زیاد میشود.
نتیجه:
- پیچیدگی بیشتر
- مدیریت سختتر
- احتمال خطا بالاتر
Authentication و Authorization در Django
Django هر دو قابلیت را به صورت داخلی ارائه میدهد.
برای احراز هویت:
request.user
و:
login()
logout()
authenticate()
استفاده میشود.
برای Authorization نیز:
permissions
groups
user.has_perm()
وجود دارد.
Authentication و Authorization در APIها
در REST APIها نیز همین مفهوم وجود دارد.
مثلا:
Authentication:
JWT Token
Authorization:
Admin Access
کاربر ابتدا با Token شناسایی میشود.
سپس سطح دسترسی او بررسی میشود.
چرا درک تفاوت این دو مهم است؟
خیلی از مشکلات امنیتی زمانی رخ میدهند که توسعه دهنده تصور میکند Authentication کافی است.
در حالی که:
- کاربر شناسایی شده
- اما دسترسی او کنترل نشده
در این شرایط امکان سوء استفاده وجود دارد.
جمع بندی
تفاوت Authentication و Authorization در این است که Authentication مسئول شناسایی هویت کاربر است، اما Authorization مسئول تعیین سطح دسترسی اوست. ابتدا سیستم هویت کاربر را تایید میکند و سپس مشخص میکند چه عملیاتی برای او مجاز است. درک درست این دو مفهوم برای طراحی سیستمهای امن، APIهای حرفه ای و مدیریت کاربران در پروژههای واقعی ضروری است.





