به عنوان برنامهنویس به احتمال زیاد با چالشهای زیادی در زمینه سطح دسترسی و احراز هویت مواجه شدهاید. در این مقاله سعی داریم دو مفهوم Authentication و Authorization را شرح دهیم و به بررسی برخی تفاوتهای آنها بپردازیم. با ما همراه باشید.
Authentication چیست؟
به مجموعه فعالیتهایی که هویت شما یا دستگاه شما را تایید میکنند، Authentication گفته میشود. به طور مثال هنگامی که برای برداشت از حساب شخصی به بانک مراجعه میکنید و متصدی باجه کدملی شما را میخواهد تا تایید کند هویتتان با صاحب حساب یکسان است یا خیر. به بیان سادهتر، با انجام این کار درستی اطلاعات موجود را بررسی میکند. در این حالت Authentication انجام شده است.
Authorization چیست؟
Authorization در اصل وظیفه بررسی سطح دسترسی کاربر یا دستگاه شما را بر عهده دارد و در حقیقت بررسی میکند که کدام کاربر به کدام قسمت یا قسمتهای یک مجموعه (یا وب اپلیکیشن) دسترسی دارد. برای درک بهتر تفاوت این دو، به مثال زیر توجه کنید:
برای سفر با هواپیما، اولین چیزی که از شما میخواهند پاسپورت شما است؛ یعنی در ابتدا مرحله احراز هویت را طی میکنید. بعد از ورود به سالن انتظار، نیاز به بلیط دارید که نشان دهد اجازه سوار شدن به کدام هواپیما و کدام مقصد را دارید، به اصطلاح سطح دسترسی شما به پرواز را مشخص کند. در اینجا عمل Authorization انجام میشود.
به این نکته مهم توجه کنید که Authentication منجر به Authorization میشود؛ یعنی وقتی هویت یک کاربر تشخیص داده شود، تمام سطح دسترسیهای کاربر نیز مشخص میشوند. با توجه به مثال بالا، اگر شما بلیط پرواز خود را جا گذاشته باشید با مراجعه به مسئول مربوطه و اعلام شماره پاسپورت خود میتوانید سوار هواپیما شوید. در نقطه مقابل Authorization همیشه منجر به Authentication نمیشود؛ برای مثال ممکن است با یک بلیط بتوانید وارد یک مجموعه تفریحی ورزشی شوید ولی روی بلیط اطلاعاتی که از طریق آن بتوانند شما را شناسایی کنند، موجود نباشد.
بعضی روشهای احراز هویت Authentication
- Password-based: یک روش ساده برای Authentication با استفاده از نام کاربری و کلمه عبور.
- Password Less: در این روش کاربر با استفاده ازOTP (One Time Password) یا Link به سیستم مورد نظر وارد میشود. مثال بارز این روش احراز هویت از طریق ایمیل یا شماره تلفن است.
- ۲FA/MFA: این روش برای احراز هویت از چند روش Authentication پیروی میکند؛ به طور مثال، کلمه عبور به همراه PIN و پرسیدن سوال از کاربر.
- Single sign-on (SSO): این امکان را به کاربر میدهد که با یک بار احراز هویت در یک سرویس، به چند سرویس به طور همزمان دسترسی داشته باشد.
- Social Authentication (third party): امکان احراز هویت کاربر با استفاده از حساب کاربری آن در فضای مجازی را Social Authentication مینامند؛ به طور مثال ثبتنام در وبسایت با استفاده از پروفایل لینکدین یا حساب کاربری گوگل.
نکته: شما میتوانید این تکنیکها را با استفاده از روش Cookie based یا Token based پیادهسازی کنید.
مفاهیم مهم در Authentication
Challenge در Authentication
وقتی کاربر احراز هویت نشده یا به اصطلاح لاگین نکرده باشد و درخواست دسترسی به بخشی را دارد که نیازمند احراز هویت است، Challenge معنا پیدا میکند. به طور مثال شما به یک وبسایت فروشگاهی مراجعه میکنید و میخواهید وارد پنل کاربری و سبد خرید خود شوید؛ در صورتی که ورود به این قسمتها نیازمند شناسایی کاربر مربوطه است.
به طور معمول کتابخانههایی که در روش Cookie based استفاده میشوند، هنگام درخواست به بخشی که نیازمند احراز هویت است ولی کاربر هنوز احراز هویت نشده، به صورت پیش فرض کاربر را به صفحه ورود هدایت میکنند (Http response status code 302).
نکته : در روش Token based با یک Http response code 401 تمام میشود.
Forbid در Authentication
وقتی کاربر احراز هویت شده و درخواستی برای بخشی که به آن دسترسی ندارد ارسال میکند، Forbid معنی پیدا میکند. به طور مثال شما وارد حساب بانکی خود شدهاید و تمامی اطلاعات مربوط به حساب شخصی خود را میبینید اما نمیتوانید حساب مشتریان دیگر را مشاهده کنید زیرا به آن بخش دسترسی ندارید. در صورتی که برای مدیر شعبه، دسترسی به تمامی حسابهای مشتریان امکانپذیر است. Forbid را به کاربر نشان میدهد که احراز هویت شده است اما اجازه دسترسی به آن بخش مخصوص را ندارد.
در روش Cookie based هنگامی که یک درخواست به بخشی که کاربر به آن دسترسی ندارد دریافت شود، به صورت پیش فرض کاربر به صفحهای با عنوان «شما دسترسی لازم برای مشاهده این صفحه را ندارید!» هدایت میشود (مشابه قسمت قبل، کاربر کد ۳۰۲ با آدرس صفحه ذکر شده دریافت و مرورگر کاربر را به صفحه مورد نظر هدایت میکند).
نکته : اگر از روش Token based استفاده شده باشد، کاربر کد ۴۰۳ دریافت میکند.
کدهای ارور ۴۰۱ و ۴۰۳ در Authentication
کد ۴۰۱ یا Unauthorized نشان میدهد که کاربر احراز هویت نشده و برای مشاهده و دسترسی به بخش مورد نظر باید مراحل احراز هویت را طی کند. معمولا کد ۴۰۱ (Unauthorized) به این معنی است که شما کوکی یا توکن (Authentication factor) را ارسال نکردهاید (یا توکن شما منقضی شده است).
کد ۴۰۳ یا Forbidden به این معنی است که سرور شما را به عنوان شخصی که احراز هویت شده است تشخیص میدهد (Signed-In) اما دسترسی لازم برای مشاهده صفحه یا Recourse درخواستی را ندارید.
از نظر امنیتی گاهی اوقات افراد و برنامهنویسان به جای کد ۴۰۳، کد ۴۰۴ یا Not Found نمایش میدهند تا کاربر تصور کند که بخشی که سعی در مشاهده آن داشته، اصلا وجود ندارد.
در انتها لازم به ذکر است که کد ۴۰۳ تنها محدود به موارد گفته شده نمیشود و میتواند دلایل مختلفی داشته باشد. برای مثال وقتی محدودیتی روی یک رنج IP اعمال شده باشد، نیز کاربران با این کد خطا مواجه میشوند.
جمع بندی
در دنیای نرمافزار، با توجه به گستردگی سیستمها، سطح دسترسی همیشه یکی از چالشها بوده است. در این مقاله برخی مفاهیم Authentication و Authorization را بررسی کردیم. همچنین چند مدل پرکاربرد برای پیادهسازی احراز هویت را معرفی کردیم و به چند مورد از خطاها و اصطلاحات این حوزه اشاره کردیم.
دیدگاهتان را بنویسید