تفاوت Authentication و Authorization در این است که Authentication مشخص می‌کند کاربر چه کسی است، اما Authorization مشخص می‌کند آن کاربر به چه منابع و قابلیت‌هایی دسترسی دارد. این دو مفهوم از مهم‌ترین بخش‌های امنیت نرم افزار هستند و بسیاری از برنامه نویسان تازه کار آن‌ها را با یکدیگر اشتباه می‌گیرند. درک درست تفاوت این دو مفهوم برای طراحی سیستم های امن و مدیریت دسترسی کاربران ضروری است.

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‌های حرفه ای و مدیریت کاربران در پروژه‌های واقعی ضروری است.