JWT Authentication چیست؟
«نسخه کامل و جامع این مقاله به همراه جزئیات بیشتر، در imaniNova.ir منتشر شده است. در ادامه قطعه ای از این مقاله را مشاهده می کنید.»
JWT مخفف عبارت JSON Web Token است و یک استاندارد باز با شماره RFC 7519 محسوب می شود که برای انتقال اطلاعات به صورت امن و امضاشده (Signed) بین دو طرف طراحی شده است.
به زبان ساده، JWT یک توکن متنی است که پس از ورود موفق کاربر (Login)، توسط سرور تولید شده و در اختیار کلاینت قرار می گیرد. از آن پس، کاربر برای هر درخواست به API این توکن را همراه درخواست ارسال می کند و سرور با بررسی اعتبار آن، هویت کاربر را تایید یا رد می کند.
برخلاف Session Authentication، در JWT معمولا نیازی نیست اطلاعات نشست کاربران در حافظه یا پایگاه داده سرور ذخیره شود. به همین دلیل از JWT به عنوان یک روش Stateless Authentication نیز یاد می شود.
چرا JWT به وجود آمد؟
قبل از معرفی JWT، بیشتر وب سایت ها از Session Authentication استفاده می کردند. این روش سال ها عملکرد مناسبی داشت، اما با رشد سیستم های توزیع شده مشکلات مختلفی ایجاد شد.
فرض کنید یک وب سایت روی ده سرور مختلف اجرا شده است. اگر Session کاربر روی سرور شماره یک ذخیره شود و درخواست بعدی او به سرور شماره هفت برسد، سرور جدید اطلاعی از Session کاربر نخواهد داشت.
برای حل این مشکل معمولا از روش هایی مانند:
- Session Replication
- Sticky Session
- Redis Session Storage
- Database Session
استفاده می شود که هرکدام پیچیدگی های خاص خود را دارند.
در مقابل، JWT هیچ اطلاعاتی روی سرور ذخیره نمی کند. تمام اطلاعات موردنیاز داخل خود Token قرار دارد و هر سروری که کلید امضا را داشته باشد، می تواند اعتبار Token را بررسی کند.
همین ویژگی باعث شده JWT به انتخاب اول بسیاری از پروژه های Cloud و Microservice تبدیل شود.
Authentication چیست؟
یکی از اشتباهات رایج برنامه نویسان تازه کار، یکی دانستن Authentication و Authorization است؛ در حالی که این دو مفهوم کاملا متفاوت هستند.
Authentication به معنی احراز هویت است.
در این مرحله سیستم بررسی می کند که آیا شما همان شخصی هستید که ادعا می کنید یا خیر.
برای مثال:
- وارد کردن نام کاربری و رمز عبور
- ورود با اثر انگشت
- ورود با تشخیص چهره
- ورود با Google
- ورود با GitHub
- ورود با کد پیامکی
همگی روش های مختلف Authentication هستند.
اگر اطلاعات صحیح باشد، سیستم هویت شما را تایید می کند.
Authorization چیست؟
پس از اینکه سیستم مطمئن شد شما چه کسی هستید، نوبت به بررسی سطح دسترسی می رسد.
این مرحله Authorization نام دارد.
برای مثال فرض کنید سه کاربر مختلف در یک سامانه وجود دارند:
- مدیر سایت
- نویسنده
- کاربر عادی
هر سه کاربر می توانند وارد سیستم شوند، اما سطح دسترسی آن ها متفاوت است.
مدیر سایت می تواند:
- حذف کاربران
- مدیریت محصولات
- مشاهده گزارش ها
- تنظیمات سایت
را انجام دهد.
در حالی که نویسنده تنها امکان ثبت مقاله را دارد و کاربر عادی فقط می تواند مقالات را مطالعه کند.
بنابراین:
Authentication پاسخ سوال زیر است:
شما چه کسی هستید؟
اما Authorization پاسخ سوال زیر را می دهد:
اجازه انجام چه کاری را دارید؟
JWT معمولا هر دو مفهوم را پوشش می دهد؛ زیرا علاوه بر شناسه کاربر، اطلاعات مربوط به نقش (Role)، سطح دسترسی (Permission) یا سایر اطلاعات موردنیاز نیز داخل Token قرار می گیرد.
JSON Web Token دقیقا چیست؟
JWT در حقیقت یک رشته متنی است که از سه بخش اصلی تشکیل شده است.
ادامه مقاله در