به نام خدا
JWT مخفف Json Web Token استانداردی بهینه و امن برای احراز هویت کاربر هنگام درخواست به سرور است. با این استاندارد سرور در هر درخواست کاربر بررسی میکند که درخواست ارسال شده از سمت کاربری با دسترسی مجاز هست یا نه
دو روش پرکاربرد اعتبارسنجی سمت سرور وجود دارد:
روش اول احراز هویت بر پایه کوکی ها می باشد و در آن به ازای هر درخواست، یک کوکی جهت اعتبارسنجی کاربر به سرور ارسال میشود (و برعکس).
روش دوم احراز هویت بر پایه توکن ها است که بر مبنای ارسال یک توکن امضا شده به سرور، به ازای هر درخواست است.
در روش دوم با استفاده از جیسون وب توکن زمانی که کاربری وارد سیستم میشود، سرور برای او یک توکن JWT صادر میکند که پس از آن در درخواستهای بعدی کاربر آن را در بخش header درخواست خود میگذارد و سرور با بررسی امضای دیجیتال آن از صحت و اصیل بودن توکن اطمینان حاصل کرده و براساس اطلاعات توکن کاربر را احراز هویت میکند.
بنابر این روش مزیت هایی نسب به روش بر پایه کوکی پیدا میکند:
در هنگام استفاده از کوکی فقط از دامنه و آدرسی مشخص میتوان به کوکی دسترسی داشت اما در روش توکن امضا شده فرقی ندارد که درخواست به چه سرور و مقصدی باشد فقط کافی است تا سرور مقصد کلید خصوصی امضای توکن را داشته باشد
در حین کار با توکنها، نیازی به ذخیره اطلاعات سمت سرور نیست و چون توکن حاوی تمام اطلاعات مرتبط با کاربر بوده دیگر نیاز به درخواست سرور به بانک داده برای شناسایی و شناخت کاربر نیست و محل ذخیرهی آن در سمت کاربر میباشد و بهینه تر است نسبت به احراز هویت از طریق کوکی.
ساختار JWT ونحوه عملکرد:
به طور کلی هر توکن JWT شامل سه بخش: header.payload.signature است و هر بخش با الگوریتم Base64 اینکد میشود.
بخش Header: معمولا دوبخش دارد که نوع توکن و الگوریتم مورد استفاده برای رمزنگاری را در آن مشخص میشود
بخش Payload: این بخش شامل اطلاعاتی درباره کاربر هست مانند: صادر کننده توکن ،تاریخ انقضا ،عنوان ، مخاطب ،ادعای هویت و …
بخش signature: امنیت توکن و دستکاری نشدن آن بر عهده امضای دیجتیال است. برای این که با تغییر و دستکاری اطلاعات دو قسمت قبلن توان ادعای دسترسی را جعل کرد و توکن تقلبی از سمتی غیر از سرور ساخت ابتدا بخش اول (هدر) با بخش دوم (پیلود) جمع شده و بعد با کلید خصوصی که فقط در سرور موجوده رمز میشه. بدین ترتیب اگر کسی اطلاعات توکن را دستکاری کند سرور با مشاهده عدم تطابق داده های فعلی با داده های بدست آمده از رمزگشایی امضای دیجیتال متوجه میشود و درخواست را رد میکند.
نکاتی امنیتی :
انتقال توکن باید حتماً توسط پروتکل امن HTTPS انجام شود تا از حملات مرد میانی و سرقت توکن جلوگیری شود.
برای توکن ها زمان انقضای کوتاه تعریف شود تا در صورت سرقت، مدت زمان سوءاستفاده کم باشد.
حتماً در رمزنگاری از الگوریتمهای معتبر و قوی مانند RS256 یا HS256 برای امضای توکن استفاده کنید تا از جعل و تغییر آن جلوگیری شود.
و در نهایت اگر payload توکن دارای اطلاعات مهمی است میتوانید آن را هم رمزنگاری کنید.
پیوست: