mehdi sedighi
mehdi sedighi
خواندن ۴ دقیقه·۵ سال پیش

احراز هویت مبتنی با استفاده از نشست با توکن؟

سرویس‌های وب فراموش کار هستند یعنی به خاطر نمی آورند چه کسی درخواست را برای آنها فرستاده است. به همین خاطر هر کدام از مشتریان علاوه بر درخواست خود شناسه ای برای احراز هویت خود نیز ارسال می کنند. در سمت سرور ابتدا شناسه از درون درخواست استخراج می شود تا با استفاده از آن هویت کاربر تعیین شود آنگاه درخواست کاربر پاسخ داده می شود. مشتریان به دو روش می توانند خود را به سرور معرفی کنند ۱- روش سنتی مبتنی بر نشست و ۲- مبتنی بر توکن.

روش مبتنی بر نشست

در روش مبتنی بر نشست زمانی که کاربر نام کاربری و رمز عبور خود را برای سرور ارسال می کند پس از تایید هویت کاربر کد شناسه برای مشتری ارسال می شود که این کد شناسه توسط مرورگر ها در فایل هایی به نام کوکی ذخیره می شوند. هر زمانی که کاربر درخواستی را برای سرور می فرستد فایل کوکی را نیز به همراه درخواست ارسال می کند در سمت سرور با استفاده از این کوکی هویت کاربر مشخص می شود و پس از مشخص شدن هویت عملیات مورد نظر انجام می شود. پاسخی به مشتری برگردانده می شود.

هر زمانی که کاربر در خواست لوگین به سرور ارسال می کند پس از تایید هویت کاربر رکوردی شامل اطلاعات هویتی کاربر در سرور ایجاد می شود که اصطلاحا نشست می گویند. شناسه این رکورد توسط سرور به مرورگر ارسال می شود که در کوکی ها ذخیره می شود. این شناسه با هر درخواستی به سمت سرور فرستاده می شود. با استفاده از این شناسه رکورد نشست بازیابی می شود. پس در هر لحظه حداقل به تعداد کاربران آنلاین در سرور متغییر نشست وجود دارد.

احراز هویت مبتنی بر توکن


توکن رشته ای رمز نگاری شده حاوی اطلاعات هویتی کاربر است. برای تولید توکن دو تابع نیاز داریم تابع اول با استفاده از یک کلید خصوصی که بر روی سرور است و اطلاعات هویتی کاربر رشته رمز شده را تولید می کند. قاعدتا نباید به آسانی و بدون داشتن کلید قابل بازیابی باشد. تابع دوم برای انجام عملیاتی معکوس عملیات تابع f است این تابع توکن دریافتی از کاربر را با استفاده از کلید دریافت می کند و داده هویتی کاربر را بازیابی می کند.

در روش احراز هویت مبتنی بر توکن زمانی که هویت کاربر تایید شد در سرور توکنی تولید می شود و و آن را برای کاربر ارسال می کند هر زمانی که مشتری درخواستی برای سرور بفرستد باید توکن را نیز ارسال کند دو تفاوت بین نشست و توکن وجود دارد اولین و مهمترین تفاوت این که در سمت سرور هیچ اطلاعاتی در مورد ارتباط برقرار شده با کاربر ذخیره نمی شود. دومین تفاوت این است که توکن معمولا در هدر (سرآیند) پاسخ ارسال می شود و برای نگه داری لازم نیست در کوکی ها ذخیره شود.

مقایسه این دو روش

‌‌قابلیت مقیاس پذیری:

همانطور که بیان شد در روش مبتنی بر نشست هر کاربری که لاگین می کند متغییری در سمت سرور باید ایجاد شود. به نظر می رسد که ایجاد این متغییر ها موجب بروز مشکل خاصی نشود و ظاهرا برای کاربردهای کوچک و متوسط همین گونه است. مشکل خاصی پیش نمی آید. مثال ۱۰۰۰ ارتباط انلاین به راحتی توسط وب سرور ها مدیریت می شوند و مشکل خاصی ایجاد نمی شود. اما تصور کنید برای نرم افزارهایی که میلیون ها یا میلیاردها کاربر دارند همانند جیمیل. شما شاید در بیش از چندین سیستم مختلف حساب جمیل خود را وارد کنید. حال اگر سرور بخواهد برای هر دستگاهی که به آن لوگین کرده است متغییری را در حافظه خود نگه دارد عملا شدنی نیست یا زمان پردازش طولانی در پی دارد.

امنیت:

مشکل دیگر احراز هویت مبنتی بر نشست مشکلی است که مرورگر ها با کوکی دارد از آنجایی که نگه داری کوکی می تواند موجب بروز مشکل شود بعضی از مرورگر ها دسترسی کوکی ها را غیر فعال می کنند. بسیاری از دستگاه ها و نرم افزارها مکانیزمی برای نگه داری کوکی ندارند. کوکی ها قابل اشتراک نیستند و ...

قابلیت به اشتراک گذاشتن توکن:

یک توکن می تواند توسط چندین دستگاه به اشتراک گذاشته شود مثال جیمیل از یک توکن برای دستگاه های مختلف شما برای شناسایی شما استفاده می کند تا زمانی که اطلاعات پروفایل کاربری شما تغییر کند. زمانی که این اطلاعات تغییر کرد توکن نامتعبر است و کاربر باید دوباره لوگین کند.

این نکاتی بود که در معرفی و مقایسه این دو روش احراز هویت به نظرم رسید. خوشحال می شوم نقطه نظرات تکمیلی شما دوستان را دریافت کنم.

برای مطالعه بیشتر می توانید به لینک زیر مراجعه کنید:

https://medium.com/@sherryhsu/session-vs-token-based-authentication-11a6c5ac45e4






برنامه نویسیتوکناحراز هویتنشستبرنامه نویسی وب
پیچیدگی‌های جهان را ساده می‌کنند و به نوید یقینی سست‌بنیاد، ریشه‌های شک‌ و کنجکاوی را، که دو شرط اول تفکرند، برمی‌کنند.
شاید از این پست‌ها خوشتان بیاید