Skip to main content
#P1220

ساخت توکن ارتباطی JWT

JWT در واقع یک توکن امنیتی است که بر پایه فرمت JSON ساخته شده است. این توکن حاوی اطلاعات ضروری کاربر مانند شناسه کاربری، نقش‌ها و سطح دسترسی اوست. جی دبلیو تی به سه بخش سربرگ (Header)، بار (Payload) و امضا (Signature) تقسیم می‌شود. سربرگ شامل الگوریتم امضا و نوع توکن است. بار، اطلاعات کاربر را به صورت JSON در خود جای داده و امضا تضمین‌کننده صحت و درستی اطلاعات است.

JWT چگونه کار میکند؟

فرآیند کار JWT به شرح زیر است:

درخواست ورود

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

تولید توکن JWT توسط درخواست کننده

درخواست کننده باید در این مرحله با توجه به اطلاعات زیر توکن JWT خود را ایجاد نموده و بعنوان کلید دسترسی جهت ارتباط با هسته مرکزی در HEADER درخواست های خود آن را ارسال نماید.

اعتبارسنجی توکن JWT

در درخواست‌های بعدی، سرور توکن JWT را دریافت کرده و اعتبار آن را بررسی می‌کند. در صورتیکه توکن معتبر باشد، به کاربر اجازه دسترسی به منابع داده می‌شود.

در حال حاضر اعتبار توکن های JWT بمدت 7 روز می باشد. که البته این موضوع بسته به توکن تولید شده در مرحله اول هم دارد در صورتی که توکن تولید شده در مرحله اول اعتباری کمتر از 7 روز داشته باشد انقضأ توکن JWT به همان میزان در نظر گرفته خواهد شد.

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

ساختار JWT به سه بخش تقسیم می‌شود که با . (dot) از هم جدا می‌شوند:

  • Header
  • Payload
  • Signature

و ساختاری شبیه به xxxxx.yyyyy.zzzzz

Header چیست؟

Header از دو بخش تشکیل شده است که بخش اول الگوریتم آن را تعیین می‌کند و بخش دوم نوع آن را مشخص می‌کند، که طبیعتاََ JWT است.

این ساختار JSON با Base64Url رمز گذاری شده است تا به بخش اول آن شکل بدهد، منظور از بخش اول xxxxx.yyyyy.zzzzz است.

برای مثال:  

عنوان نوع وضعیت مقادیر توضیحات
alg String اجباری HS256 الگوریتم ارسال درخواست
typ String اجباری JWT نوع درخواست
{
    "alg": "HS256",
    "typ": "JWT"
}
Payload چیست؟

بخش دوم xxxxx.yyyyy.zzzzz) Token) را Payload تشکیل می‌دهد و شامل یک سری اطلاعات درباره‌ی کاربر و یک سری داده‌های اضافی‌اند، که استفاده از آن‌ها خیلی رایج است. Payloadها می‌توانند ساختاری شبیه به زیر داشته باشند.

عنوان نوع وضعیت مقادیر توضیحات
iss String اجباری   دامنه ثبت شده در هسته مرکزی
aud String اجباری api مخاطب شما که در مواردی که شما فقط استفاده کننده از API هستید برابر api باید باشد
iat Timestamp اجباری   زمان صدور توکن JWT
uuid Integer اجباری   سریال عددی درخواست کننده
uip IP اجباری   آدرس IP درخواست کننده
{
    "iss": "Your domain",
    "aud": "Your level",
    "iat": "Timestamp",
    "uuid": "Your ID",
    "uip": "Your IP"
}
Signature چیست؟

آخرین و مهم‌ترین بخش JWTها Signature است، در حقیقت Signature تایید می‌کند که آیا داده‌ای که از سمت کاربر برگشته است بهم ریخته و یا دستکاری شده است؟

الگوریتمی که ما برای رمزنگاری در Header داده‌ایم را می‌گیرد، header و Payload را ترکیب می‌کند و آن‌ها را دوباره رمزنگاری می‌کند و بار دیگر با کلیدی که به Signature داده ایم رمزنگاری می‌کند و اگر کسی مقدار رمزگذاری شده را تغییر دهد خطایی دریافت می‌کنیم که به ما نشان می‌دهد Signature معتبر نمی‌باشد.

Signatureها نیز ساختاری شبیه به زیر دارند.  

عنوان نوع وضعیت مقادیر توضیحات
Header base64UrlEncode اجباری   JSON هدر اینکد شده
Payload base64UrlEncode اجباری   JSON اطلاعات ارسالی اینکد شده
Signature String اجباری   توکن دریافتی از اتوماسیون
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),token)

خروجی این عملیات بعنوان توکن JWT برای ارسال درخواست ها استفاده شود.