در دنیای دیجیتال امروز، وب به شاهراهی پر تردد و پویا، بستری برای تبادل اطلاعات، تعاملات اجتماعی و فعالیتهای اقتصادی تبدیل شده است. در این میان، حفاظت از حریم خصوصی و اطلاعات کاربران، نقشی حیاتی ایفا میکند. فرایند های مختلفی برای پیاده سازی احراز هویت در وب وجود دارد که در این جا به این موارد می پردازیم.
قبل از اینکه به روش های احراز هویت در وب بپردازیم بیاید به یکی از ویژگی های پروتکل HTTP بپردازیم.
HTTP پروتکلی بدون حافظه !
پروتکل HTTP که برای تبادل اطلاعات در وب استفاده میشود، بدون حافظه یا stateless است. به این معنی که هر درخواستِ ارسالی به طور مستقل و بدون وابستگی به درخواستهای قبلی یا بعدی پردازش میشود. در این نوع پروتکل، هیچ اطلاعاتی در مورد ویژگیهای پیامهای ارسالی بین دو طرف (کلاینت و سرور) ذخیره نمیشود. به عبارت دیگر، هر بار که کاربری درخواستی را به سرور ارسال میکند، باید تمام اطلاعات لازم برای پردازش آن درخواست، از جمله اطلاعات مربوط به احراز هویت کاربر، در همان درخواست گنجانده شود.
مثالی از بیحافظهبودن HTTP
فرض کنید شما در حال ورود به یک وبسایت هستید. در اولین درخواست، نام کاربری و رمز عبور خود را برای احراز هویت به سرور ارسال میکنید. سرور پس از بررسی اطلاعات، در صورت صحت، به شما اجازه ورود به وبسایت را میدهد.
در تمام درخواستهای بعدی شما به وبسایت، حتی اگر در همان صفحه یا بخش دیگری از سایت باشید، باید دوباره نام کاربری و رمز عبور خود را ارسال کنید. چرا که سرور هیچ اطلاعاتی از احراز هویت شما که درخواستهای قبلی که برای او فرستادید را ذخیره نکرده است و اطلاعی از هویت شما ندارد.
با توجه به این موضوع راه حل های مختلفی برای احراز هویت در وب وجود دارد که هر کدام ویژگی مثبت و منفی خود را دارند.
احراز هویت HTTP با روش Basic
روش Basic یکی از سادهترین روشهای احراز هویت در پروتکل HTTP است. در این روش، اطلاعات کاربری (نام کاربری و رمز عبور) به صورت رمزنگاری نشده در هر درخواست به سرور ارسال میشود.
روند کلی روش Basic:
- درخواست اولیه: کاربر درخواستی را به سرور ارسال میکند.
- پاسخ چالش: اگر درخواست فاقد اطلاعات احراز هویت باشد، سرور یک پاسخ با کد 401 Unauthorized به کاربر ارسال میکند. این پاسخ شامل WWW-Authenticate با نوع احراز هویت Basic است.
- ارسال اطلاعات احراز هویت: مرورگر نام کاربری و رمز عبور وارد شده توسط کاربر را به صورت Base64 کدگذاری میکند و در قالب header پروتکل HTTP با کلید Authorization در درخواست بعدی خود به سرور ارسال میکند.
- تأیید اعتبار: سرور اطلاعات احراز هویت را رمزگشایی کرده و صحت آن را بررسی میکند.
- پاسخ نهایی:
- در صورت تأیید اعتبار: سرور با کد 200 OK پاسخ میدهد و صفحه یا اطلاعات مورد نظر کاربر را ارسال میکند.
- در صورت عدم تأیید اعتبار: سرور با کد 401 Unauthorized یا 403 Forbidden پاسخ میدهد و به کاربر اجازه دسترسی نمیدهد.
این روش یکی از ساده ترین روش ها برای احراز هویت می باشد. اما کارآمد نیست.
نقاط ضعف:
- عدم رمزگذاری: اطلاعات رمز عبور در این روش به صورت رمزگذاری نشده ارسال میشود و در معرض خطر هک و سوء استفاده قرار دارد.
- ارسال در هر درخواست: رمز عبور باید در هر درخواست احراز هویت ارسال شود .
به خاطر عدم رمز گذاری استفاده از این روش فقط در پروتکل امن HTTPS قابل توجیه است و در پروتکلهای ناامن مانند HTTP، خطرات امنیتی زیادی را به همراه دارد.
Session Authentication
یکی از روشهای رایج برای احراز هویت کاربران در وب، Session Authentication یا احراز هویت مبتنی بر Session است. در این روش، برخلاف روش Basic Authentication، کاربر اطلاعات خود را فقط یک بار برای سرور ارسال میکند. در صورت صحت نام کاربری و رمز عبور، سرور یک Session برای کاربر ایجاد میکند. این Session شامل اطلاعاتی مانند نام کاربری و دیگر اطلاعات مورد نیاز وبسایت است.
سپس، سرور شناسه (Session ID) را برای کاربر ارسال میکند. از آن پس، کاربر فقط کافی است تا این شناسه را در درخواستهای بعدی خود به سرور ارسال کند. سرور با دریافت Session ID، به دنبال Session مربوطه در حافظه خود میگردد. در صورت وجود Session با آن شناسه، کاربر شناسایی شده و اطلاعات مورد نظر برای او ارسال میشود.
پروسه کلی این روش به صورت زیر می باشد.
- ورود اطلاعات کاربری: کاربر نام کاربری و رمز عبور خود را به سرور ارسال میکند.
- احراز هویت: سرور نام کاربری و رمز عبور را با اطلاعات ذخیرهشده خود مقایسه میکند.
- ایجاد Session : در صورت صحت اطلاعات، سرور یک Session جدید برای کاربر ایجاد میکند.
- ارسال Session ID : سرور Session ID را برای کاربر ارسال میکند.
- ذخیره Session ID : کاربر Session ID را در حافظه مرورگر خود ذخیره میکند.
- ارسال Session ID در درخواستهای بعدی: کاربر در هر درخواست بعدی خود به سرور، Session ID را ارسال میکند.
- شناسایی کاربر: سرور با دریافت Session ID، به دنبال Session مربوطه در حافظه خود میگردد.
- ارائه اطلاعات: در صورت وجود Session با آن شناسه، سرور کاربر را شناسایی شده و اطلاعات مورد نظر را برای او ارسال میکند.
مزایا و معایب روش Session Authentication
مزایای این روش این هست که اطلاعات فقط یکبار برای سرور ارسال و صحت سنجی می شوند. در این روش بار سرور کاهش می یابد زیرا نیاز نیست که هر بار اطلاعات را صحت سنجی کنند. همچنین تجربه کاربری بهتری برای کاربر ارائه می دهید زیرا نیاز نیست که اطلاعات در هر درخواست ارسال شوند.
اما روش معایبی هم دارد، این روش می تواند دچار مشکلات امنیتی شود و اگر یک برنامه بخواهد توسعه یابد و روی چند سرور اجرا شود، این روش کارآمدی خوبی نمی تواند داشته باشد.
احراز هویت با استفاده از توکنهای JWT
در روش دوم که در API ها بسیار رایج است، از توکنهای JSON Web Token یا به اختصار JWT برای احراز هویت کاربران استفاده میشود. در این روش، پس از ورود کاربر و تأیید اطلاعات، سرور یک توکن رمزنگاری شده را برای او میسازد. این توکن شامل اطلاعاتی مانند نام، ایمیل و سایر جزئیات مربوط به کاربر است.
نکته مهم این است که توکن JWT در سرور ذخیره نمیشود، بلکه به کاربر فرستاده میشود تا در درخواستهای بعدی خود به سرور ارسال کند. این توکن ها معمولاٌ دارای تاریخ انقضا هستند و پس از گذشت زمان مشخصی، اعتبار خود را از دست میدهند.
فرایند احراز هویت با توکن JWT :
- ارسال اطلاعات : کاربر اطلاعات ورود خود را به سرور ارسال میکند.
- صحت سنجی اطلاعات و ساخت توکن : در صورت صحت اطلاعات، سرور یک توکن JWT را برای کاربر میسازد و آن را به او ارسال میکند.
- دریافت توسط کاربر: مرورگر توکن را در حافظه ذخیره میکند و آن را در هدر درخواستهای بعدی خود به سرور ارسال میکند.
- دریافت توکن توسط سرور : سرور توکن را دریافت میکند، آن را رمزگشایی میکند و اطلاعات کاربر را استخراج میکند.
- صحت سنجی توکن :در صورت صحت اطلاعات توکن، سرور به درخواست کاربر پاسخ میدهد.
ذاحراز هویت با توکن JWT
مزایای و معایب استفاده از توکنهای JWT
مزایا استفاده از توکنهای JWT
- امنیت: توکنهای JWT به صورت رمزنگاری شده هستند و جعل آنها دشوار است.
- سادگی: استفاده از توکنهای JWT آسان است و نیاز به ذخیره اطلاعات کاربر در سرور را از بین میبرد.
- قابلیت انعطافپذیری: توکنهای JWT را میتوان در انواع مختلف برنامهها و APIها استفاده کرد.
معایب استفاده از توکنهای JWT
- امنیت: در صورت سرقت توکن، اطلاعات کاربر میتواند به خطر بیفتد.
- پیچیدگی: پیادهسازی احراز هویت با استفاده از توکنهای JWT میتواند پیچیدهتر از روشهای دیگر باشد.
استفاده از توکنهای JWT روشی امن و انعطافپذیر برای احراز هویت کاربران در APIها است. با وجود مزایایی که این روش دارد، باید به خاطر داشت که پیادهسازی صحیح آن برای حفظ امنیت اطلاعات کاربران ضروری است.
on احراز هویت در وب