JWT چیست و چه کاربرد هایی دارد؟

JWT مخفف عبارت JSON Web Token می باشد همان طور که می بینید در این عبارت کلمه JSON وجود دارد پس می توان نتیجه گرفت فرمت JWT از نوع JSON است.
کاربردهای JWT
به صورت کلی برای دو مفهوم زیر از JWT استفاده می شود:
- Authorization
- Information Exchange
چرا باید از JWT استفاده کنیم؟
اگر فرض کنیم برای تبادل اطلاعات (Information Exchange) می خواهیم از JWT استفاده کنیم طبیعتا این پرسش برای ما به وجود می آید که چرا به طور معمول فرایند اتصال به سرور و درخواست اطلاعات و در نهایت دریافت اطلاعات را انجام ندهیم.
پاسخ این سوال را در چند بند خدمت شما می گوییم:
- مهم ترین عامل امینت می باشد همانطور که در بالا گفته شد کار اصلی JWT این است که برای هر کاربر توکن می سازد و این امر خود باعث می شود کاربر قبل از داشتن دسترسی به هر داده ای اعتبار سنجی شود.
- ساده بودن پیاده سازی (با استفاده از کتابخانه های از پیش تعریف شده به راحتی می توان از JWT استفاده کرد)
- Compact بودن یا به عبارتی سایز کمی دارد این مزیت به ما این امکان را می دهد اطلاعات را با یک URL و با استفاده از یک متد POST ارسال کنیم.
- تمام اطلاعاتی که برای Authorization لازم است در خود دارد به عبارتی self-contianed می باشد.
ساختار JWT :
به طور کلی در هنگام درخواست از سرور یا ارسال اطلاعات در روش JWT اصطلاحا یک توکن از کلاینت به سرور ارسال می شود که ساختار این توکن از سه بخش زیر تشکیل می شود و با . (dot) از هم جدا می شوند
- Header
- Payload
- Signature
محتویات یک توکن در JWT:
برای دیدن محتویات توکن میتوانید به سایت jwt.io مراجعه کنید برای مثال محتویات یک توکن به صورت زیر است:
Token چیست و چه کاربری دارد؟
اگر بخواهیم خیلی ساده بیان کنیم، می توان توکن را یک کلید در نظر گرفت که با وجود آن می توان از نرم افزار استفاده کرد وقتی شما قصد دارید از سمت سرور یک نرم افزار که در آن از مکانیزم JWT استفاده می شود دیتا دریافت کنید از سمت نرم افزار یک عبارت یکتا برای گوشی یا سیستم شما ساخته می شود. این عبارت کاملا یکتا می باشد و فقط مختص شما نرم افزار یا ساست شماست این عبارت همان توکن می باشد و هر بار که شما در خواستی از سرور داشته باشید این توکن باید همراه با درخواست شما به سمت سرور ارسال شود در صورتی که Token ارسالی شما صحیح باشد در خواست شما مجوز استفاده و دریافت اطلاعات مورد نیاز را دارد.
Header چیست:
هدر از دو بخش تشکیل می شود که بخش اول آن الگوریتم را تعیین می کند و بخش دوم نوع آن را مشخض می کند.
در تصویر قبل بخش یک ها همان توکن ارسالی کلاینت به سرور می باشد بخش قرمز رنگ این توکن همان هدر می باشد.
1 2 3 4 |
{ "alg": "HS256", "typ": "JWT" } |
Payload چیست؟
بخش دوم توکن که در تصویر رنگ آن بنفش می باشد همان Payload می باشد. که شامل اطلاعات ارسالی کاربر و یک سری دیتا می شود برای مثال:
1 2 3 4 5 |
{ "iss": "123456789", "name": "penom", "admin": true } |
Signature چیست؟
بخش سوم در تصویر که یکی از مهم ترین قسمت کار همین جاست یعنی بررسی داده ارسالی از سمت کاربر که آیا این داده در بین راه یا حتی توسط خود کاربر تغییر کرده یا خیر این کار دقیقا وظیفه Signature می باشد.
Signature توسط یک الگوریتم که در هدر قرار دارد و با یک کلید که از پیش تعیین می شود. در یک ساختار مصل ساختار زیر Header و Payload را ترکیب و رمزگذاری می کند در واقع این عملیات دو بار صورت می گیرید
1 2 3 4 |
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) |
سخن نهایی:
در این مقاله فهمیدیم JWT شامل چه بخش هایی می شود توجه داشته باشید. استفاده از JWT می تواند در طراحی وب سایت یا طراحی اپلیکیشن شما را یک سرو گردن از نرم افزار مشابه که به صورت معمول و بدون استفاده از JWT پیاده سازی شود. بالا تر ببرد، چه از نظر سرعت و چه از نظر امنیت پس بهتر است به آن نگاه ویژه ای داشته باشیم
دیدگاهتان را بنویسید