Authentication vs Authorization چیست؟ تفاوت احراز هویت و تعیین سطح دسترسی به زبان ساده
چرا بعد از ورود به یک سایت، همه کاربران امکانات یکسانی ندارند؟
تصور کنید وارد حساب بانکی خود شدهاید، اما ناگهان متوجه میشوید میتوانید اطلاعات تمام مشتریان بانک را مشاهده کنید. یا وارد پنل یک وبسایت شدهاید و بدون اینکه مدیر باشید، امکان حذف کاربران را دارید!
چنین اتفاقی نباید رخ دهد. دلیل جلوگیری از این مشکلات، استفاده از دو مفهوم مهم در امنیت نرمافزار یعنی Authentication و Authorization است.
این دو اصطلاح در بسیاری از وبسایتها، اپلیکیشنها و سرویسهای آنلاین به کار میروند و اگر قصد یادگیری برنامهنویسی، طراحی سایت یا امنیت سایبری را دارید، شناخت تفاوت آنها یکی از اولین مهارتهایی است که باید یاد بگیرید.
در این مقاله با زبانی ساده بررسی میکنیم Authentication و Authorization چیست، چه تفاوتی با هم دارند، چگونه در برنامهنویسی استفاده میشوند و چرا هر دو برای امنیت سیستمها ضروری هستند.
Authentication یا احراز هویت چیست؟
Authentication به معنی احراز هویت است؛ یعنی سیستم بررسی میکند آیا واقعاً همان شخصی هستید که ادعا میکنید یا خیر.
به زبان ساده، Authentication به این سؤال پاسخ میدهد:
«شما چه کسی هستید؟»
اگر سیستم بتواند هویت شما را تأیید کند، اجازه ورود صادر میشود.
روشهای رایج Authentication
امروزه روشهای مختلفی برای احراز هویت استفاده میشوند که هر کدام سطح امنیت متفاوتی دارند:
نام کاربری و رمز عبور
رمز یکبار مصرف (OTP)
اثر انگشت
تشخیص چهره
تشخیص عنبیه چشم
ورود با حساب Google، Microsoft یا Apple
کلیدهای امنیتی سختافزاری (Security Key)
هرچه روش احراز هویت قویتر باشد، احتمال دسترسی افراد غیرمجاز کمتر خواهد بود.
مثال ساده
فرض کنید میخواهید وارد حساب اینستاگرام خود شوید.
نام کاربری و رمز عبور را وارد میکنید و در صورت فعال بودن تأیید دومرحلهای، کد ارسالشده به تلفن همراهتان را نیز وارد میکنید.
پس از بررسی این اطلاعات، سیستم مطمئن میشود که صاحب واقعی حساب هستید.
این فرایند همان Authentication است.
یک نمونه کد ساده
در بسیاری از برنامهها، ابتدا اعتبار اطلاعات ورود بررسی میشود:
if (username === "Ali" && password === "123456") {
console.log("Authenticated");
}
در این مثال، اگر اطلاعات ورود صحیح باشد، کاربر با موفقیت احراز هویت میشود.
Authorization یا تعیین سطح دسترسی چیست؟
بعد از اینکه هویت کاربر تأیید شد، سیستم باید تصمیم بگیرد او اجازه انجام چه کارهایی را دارد.
به این مرحله Authorization یا تعیین سطح دسترسی گفته میشود.
Authorization به سؤال زیر پاسخ میدهد:
«شما اجازه انجام چه کاری را دارید؟»
یک مثال کاربردی
فرض کنید سه نفر وارد پنل یک سامانه آموزشی میشوند:
دانشجو
مدرس
مدیر سایت
هر سه با موفقیت وارد سیستم شدهاند؛ یعنی Authentication برای آنها انجام شده است.
اما امکاناتی که مشاهده میکنند متفاوت است:
دانشجو فقط دورههای خود را مشاهده میکند.
مدرس میتواند محتوای دورهها را مدیریت کند.
مدیر سایت به مدیریت کاربران، تنظیمات و سایر بخشهای سیستم دسترسی دارد.
این تفاوتها نتیجه Authorization هستند.
نمونه کد ساده
if (user.role === "Admin") {
console.log("Access Granted");
}
در این مثال تنها کاربری که نقش Admin دارد اجازه ورود به بخش مدیریت را خواهد داشت.
چرا Authentication و Authorization اهمیت دارند؟
تقریباً تمام سامانههای مدرن از این دو مکانیزم استفاده میکنند؛ از شبکههای اجتماعی و فروشگاههای اینترنتی گرفته تا اینترنت بانک، سامانههای آموزشی و اپلیکیشنهای موبایل.
اگر Authentication وجود نداشته باشد، هر فردی میتواند خود را به جای شخص دیگری معرفی کند.
اگر Authorization وجود نداشته باشد، کاربران ممکن است به اطلاعات یا امکاناتی دسترسی پیدا کنند که مجاز به استفاده از آنها نیستند.
استفاده صحیح از این دو مکانیزم مزایای زیادی دارد:
افزایش امنیت اطلاعات کاربران
جلوگیری از ورود افراد غیرمجاز
محافظت از دادههای حساس
مدیریت سادهتر نقشها و کاربران
کنترل دقیق مجوزها
کاهش بسیاری از آسیبپذیریهای امنیتی
Authentication و Authorization در برنامهنویسی
تقریباً تمام فریمورکهای مدرن از این دو مفهوم پشتیبانی میکنند؛ از جمله:
ASP.NET Core
Laravel
Django
Spring Boot
Express.js
NestJS
روند کلی در بیشتر پروژهها به این صورت است:
کاربر اطلاعات ورود را ارسال میکند.
سیستم هویت او را بررسی میکند (Authentication).
در صورت موفقیت، یک Session یا Token برای او ایجاد میشود.
هنگام هر درخواست جدید، سیستم بررسی میکند کاربر اجازه انجام آن عملیات را دارد یا خیر (Authorization).
نقش JWT در Authentication
یکی از روشهای رایج احراز هویت در برنامههای تحت وب و APIها استفاده از JWT (JSON Web Token) است.
پس از ورود موفق، سرور یک Token برای کاربر صادر میکند. کاربر این Token را در درخواستهای بعدی ارسال میکند و سرور بدون نیاز به ورود مجدد، هویت او را تشخیص میدهد.
در بسیاری از معماریهای مدرن، بهویژه APIهای Stateless، JWT مدیریت احراز هویت را سادهتر و مقیاسپذیرتر میکند.
نقش OAuth در Authentication
حتماً در بسیاری از سایتها گزینههایی مانند موارد زیر را دیدهاید:
ورود با Google
ورود با GitHub
ورود با Microsoft
ورود با Apple
این قابلیت معمولاً با استفاده از OAuth 2.0 پیادهسازی میشود.
در این روش، سایت از سرویسهای معتبر برای تأیید هویت شما استفاده میکند و نیازی به ساخت یک رمز عبور جدید برای هر وبسایت نخواهید داشت.
نقش RBAC در Authorization
یکی از رایجترین روشهای مدیریت سطح دسترسی، Role-Based Access Control (RBAC) است.
در این روش، به هر کاربر یک نقش اختصاص داده میشود؛ مانند:
مدیر
مدرس
دانشجو
کارمند
مشتری
هر نقش مجموعه مشخصی از مجوزها را در اختیار دارد و کاربران فقط به امکانات مرتبط با نقش خود دسترسی خواهند داشت.
این روش مدیریت کاربران را در پروژههای بزرگ بسیار سادهتر و امنتر میکند.
آیا Authentication بدون Authorization امکانپذیر است؟
بله.
ممکن است کاربری وارد سیستم شود اما هیچ مجوز خاصی برای انجام عملیات مهم نداشته باشد.
اما Authorization بدون Authentication تقریباً معنا ندارد؛ زیرا تا زمانی که هویت کاربر مشخص نباشد، سیستم نمیتواند تصمیم بگیرد چه مجوزهایی باید به او اختصاص دهد.
به همین دلیل، در بیشتر نرمافزارها ابتدا Authentication و سپس Authorization انجام میشود.
اشتباه رایج برنامهنویسان تازهکار
یکی از اشتباهات متداول این است که فقط صفحه ورود را پیادهسازی میکنند و بررسی سطح دسترسی را فراموش میکنند.
برای مثال، اگر کاربر عادی بتواند تنها با تغییر آدرس یک صفحه (URL) وارد بخش مدیریت شود، یعنی سیستم فقط Authentication را انجام داده و Authorization را بهدرستی بررسی نکرده است.
به همین دلیل، توسعهدهندگان حرفهای در تمام بخشهای حساس برنامه، علاوه بر احراز هویت، مجوزهای دسترسی را نیز بررسی میکنند.
جمعبندی
Authentication و Authorization دو مفهوم اساسی در امنیت نرمافزار هستند که هر کدام وظیفه متفاوتی دارند.
Authentication مشخص میکند چه کسی قصد ورود به سیستم را دارد و Authorization تعیین میکند همان کاربر چه کارهایی میتواند انجام دهد.
در پروژههای مدرن، معمولاً Authentication با ابزارهایی مانند JWT، OAuth یا احراز هویت چندمرحلهای پیادهسازی میشود و Authorization نیز با استفاده از Role، Permission یا RBAC مدیریت میشود.
اگر قصد دارید وارد دنیای برنامهنویسی، توسعه وب یا امنیت سایبری شوید، یادگیری این دو مفهوم یکی از مهمترین گامها برای طراحی نرمافزارهای امن است. پس از درک این مباحث، پیشنهاد میشود نحوه پیادهسازی آنها را در فریمورکهایی مانند ASP.NET Core، Laravel، Django یا Node.js نیز یاد بگیرید؛ زیرا تقریباً تمام نرمافزارهای امروزی از این مکانیزمها استفاده میکنند.
در فرایانه تلاش میکنیم مفاهیم برنامهنویسی و فناوری را با زبانی ساده، کاربردی و مطابق با نیاز بازار کار آموزش دهیم تا مسیر یادگیری برای علاقهمندان، از مبتدی تا حرفهای، روشنتر و لذتبخشتر باشد.