Email: info@developit.ir

JWT، مقدمه ای بر JSON Web Tokens

JSON Web Token چیست؟

JSON Web Token یا JWT یک استاندارد فشرده و جامع برای انتقال امن اطلاعات بین چند زبان یا محیط مانند JSON است.

JWT میتواند با استفاده از الگوریتم HMAC یا کلید های عمومی/خصوصی بوسیله ی RSA رمزنگاری شوند.

برخی از مفاهیم JWT به شرح زیر میباشد:

1) فشرده/Compact: از آنجایی که حجم اطلاعات کمتر میشود، JWT میتواند از طریق URL ارسال شود. به عنوان مثال ارسال اطلاعات با استفاده از پارامتر POST یا قرار دادن آنها داخل HTTP header.

کاهش حجم اطلاعات به معنی انتقال سریعتر نیز میباشد.

2) جامع/Self-contained: این بسته شامل تمام اطلاعات مورد نیاز در مورد کاربر و اجتناب از درخواست بیش از یک بار به پایگاه داده است.

چرا باید از JSON Web Tokens استفاده کنیم؟

1) احراز هویت: به طور معمول برای استفاده ازJWT  هنگام ورود کاربر به سیستم این کار انجام میشود. احراز هویت به کاربر اجازه ارسال درخواست، دسترسی به خدمات و منابع را میدهد. احراز هویت تنها یک ویژگی است که به طور گسترده در JWT استفاده میشود زیرا سربار کمی دارد و میتوان از آن به آسانی در حوزه های مختلف بهره برد.

2) تبادل اطلاعات: JWT یک روش بسیار خوب برای انتقال امن اطلاعات بین محیط های مختلف است زیرا به عنوان مثال با استفاده از کلیدهای عمومی و خصوصی رمزنگاری شده و دارای امضای دیجیتال میباشد در نتیجه شما میتوانید مطمئن باشید چه کسی اطلاعات را برای شما ارسال میکند. علاوه بر این میتوانید بررسی کنید محتوای ارسال شده دستکاری نشده باشد.

ساختار JSON Web Token چگونه است؟

JWT شامل سه قسمت میباشد که به وسیله ی نقطه ( . ) از هم جدا شده اند:

  • Header
  • Payload
  • Signature

در نتیجه JWT چیزی شبیه به xxxxx.yyyyy.zzzzz میشود.

1) Header

header معمولا از دو بخش تشکیل شده، نوع و الگوریتم رمزنگاری مورد استفاده.

به عنوان مثال:

{
  "alg": "HS256",
  "typ": "JWT"
}

سپس این شی JSON با استفاده از Base64Url رمزنگاری شده و به عنوان بخش اول ساختار JWT قرار میگیرد.

2) Payload

بخش دوم payload است که شامل claim هاست. claim ها اطلاعاتی در مورد موجودیت ها را بیان میکنند(معمولا اطلاعاتی در باره کاربر) و همچنین میتوانند شامل داده های اضافی(metadata) نیز باشند. 

سه نوع claim وجود دارد، رزرو شده، عمومی و خصوصی.

- رزرو شده: این نوع claim ها از پیش تعریف شده و قابل استفاده هستند در حالی که اجباری برای استفاده از آنها وجود ندارد اما توصیه شده که این کار را انجام دهیم مانند iss, exp, sub و ...

- عمومی: میتواند به خواست کسانی که از JWT استفاده میکنند تعریف شود. برای جلوگیری از برخورد/تداخل claim های عمومی را باید در IANA JSON Web Token Registry یا در URL همراه با namespace تعریف کرد.

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

به عنوان مثال payload میتواند چیزی شبیه به شی زیر باشد:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

سپس این شی JSON با استفاده از Base64Url زمزنگاری شده و به عنوان بخش دوم ساختار JWT قرار میگیرد.

3) Signature

برای ایجاد این بخش شما به header و payload کد(رمزنگاری) شده، یک کلید محرمانه و الگوریتم مشخص شده در header احتیاج دارید.

به عنوان مثال شما میخواهید از الگوریتم HMAC SHA256 استفاده کنید، signature به صورت زیر خواهد شد:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

signature به منظور بررسی ارسال کننده JWT استفاده میشود تا از ارسال کننده و اینکه محتوای ارسال شده را بدون تغییر دریافت میکنیم مطمئن باشیم.

در نهایت خروجی یک رشته Base64 شده است که در آن سه بخش توضیح داده شده با نقطه از هم تفکیک شده اند. حال میتوان به راحتی در محیط های مختلف از JWT استفاده کرد در حالی که نسبت به استاندارد های XML-based فشرده تر و کوچکتر است.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

 

این مطلب آخرین بار در تاریخ 19:15 - 1395/10/14 ویرایش شده است.

ارسال نظر
عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید