ویرگول
ورودثبت نام
Mohamad Nowrozie
Mohamad Nowrozie
Mohamad Nowrozie
Mohamad Nowrozie
خواندن ۳ دقیقه·۲ روز پیش

نگاهی ساده به JWT | برداشت شخصی من

مقدمه

احراز هویت یکی از بخش‌های مهم هر سیستم یا وب‌سایته. یعنی سیستم بفهمه تو همونی هستی که می‌گی هستی.قبلاً این کار با Session انجام می‌شد: بعد از لاگین، سرور اطلاعات کاربر لاگین‌کرده رو نگه می‌داشت و هر درخواست رو بررسی می‌کرد. اما با افزایش تعداد کاربران، ذخیره‌سازی Session برای سرور مشکل‌ساز شد و مقیاس‌پذیری سخت می‌شد.اینجا بود که ایده‌ی Token به وجود اومد: به جای اینکه سرور وضعیت کاربر رو نگه داره، خود کاربر یه مدرک همراهش داشته باشه که قابل بررسی باشه. یکی از انواع معروف این توکن‌ها JWT یا JSON Web Token است.

JWT چیست؟

یه توکن متنیه که اطلاعات رو به صورت JSON نگه می‌داره و برای احراز هویت کاربر استفاده می‌شه.

تفاوت اصلی با Session:

Session: سرور وضعیت رو نگه می‌داره

JWT: سرور وضعیت کاربر رو ذخیره نمی‌کنه، همه اطلاعات لازم داخل خود توکنه

ساختار JWT

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

xxxxx.yyyyy.zzzzz

Header:

  • شامل اطلاعات توکن و الگوریتم امضا

  • سرور می‌فهمه چطور توکن رو بررسی کنه

Payload:

  • اطلاعات کاربر + زمان انقضا (exp)

  • مثال: user_id, نقش کاربر، تاریخ انقضا

نکته مهم: Payload رمزنگاری نشده، یعنی هر کسی که توکن داشته باشه می‌تونه محتواشو ببینه. پس اطلاعات حساس داخلش نذارید.

Signature:

  • امضا با کلید خصوصی سرور (Secret Key) ساخته می‌شه

  • وقتی توکن برمی‌گرده سرور دوباره امضا رو محاسبه می‌کنه و بررسی می‌کنه که Payload تغییر نکرده باشه

به این ترتیب سرور متوجه دستکاری توکن می‌شه بدون اینکه وضعیت کاربر رو نگه داشته باشه.

چطور JWT کار می‌کند؟

مرحله به مرحله

  1. لاگین کاربر: یوزرنیم و پسورد ارسال می‌کنه

  2. ساخت JWT توسط سرور:

    • سرور اطلاعات کاربر + زمان انقضا رو داخل Payload می‌ذاره

    • Signature با Secret Key ساخته می‌شه

  3. ارسال توکن به کاربر: معمولاً تو هدر Authorization: Bearer <JWT>

  4. درخواست‌های بعدی: کاربر JWT رو همراه هر درخواست می‌فرسته

  5. اعتبارسنجی سرور:

    • بررسی امضا

    • بررسی زمان انقضا

    • تصمیم‌گیری اجازه یا عدم اجازه

نکته: سرور هیچ Session یا وضعیت کاربر رو نگه نمی‌داره، فقط قوانین و کلید امضا رو می‌دونه.

زمان انقضا و امنیت

  • Exp: مشخص می‌کنه توکن تا چه زمانی معتبره

  • JWT به خودی خود امن نیست، فقط اگر دست کسی نیفته و در مکان امن ذخیره بشه می‌تونه امن باشه

  • روش‌های امن ذخیره:

    • HttpOnly Cookie

    • ارسال فقط روی HTTPS

  • هر توکن طول عمر کوتاه داشته باشه، امنیت بیشتره

  • برای طولانی‌ترها از Refresh Token استفاده می‌کنیمExp: مشخص می‌کنه توکن تا چه زمانی معتبره

  • JWT به خودی خود امن نیست، فقط اگر دست کسی نیفته و در مکان امن ذخیره بشه می‌تونه امن باشه

  • روش‌های امن ذخیره:

    • HttpOnly Cookie

    • ارسال فقط روی HTTPS

  • هر توکن طول عمر کوتاه داشته باشه، امنیت بیشتره

  • برای طولانی‌ترها از Refresh Token استفاده می‌کنیم

اشتباهات رایج درباره JWT

  1. JWT = امنیت کامل نیست

    • JWT فقط ابزار احراز هویته، امنیت کامل به پیاده‌سازی بستگی داره

  2. اطلاعات داخل JWT رمزنگاری نشده

    • Payload رو هرکسی می‌تونه ببینه

  3. JWT جلوی CSRF/XSS رو نمی‌گیره

    • نحوه ذخیره و ارسال مهمه

  4. JWT همیشه بهترین انتخاب نیست

    • برای سیستم‌های ساده Session بهتره، JWT بیشتر برای API و Microservice مناسب‌تره

جمع‌بندی و برداشت شخصی

برداشت خودم از JWT:

  • یه ابزار ساده و مفید برای احراز هویت تو سیستم‌های مدرن

  • Stateless بودنش باعث می‌شه سرور سبک باشه و مقیاس‌پذیری راحت‌تر باشه

  • ولی امنیتش کاملاً وابسته به کلید امضا، زمان انقضا و محل ذخیره توکن هست

  • اگر این اصول رعایت بشه، یه روش امن و کارآمده

بزرگ‌ترین اشتباه اینه که فکر کنیم چون JWT امضا داره، همه چیز امنه. کلید، محل ذخیره و مدیریت عمر توکن خیلی مهمه.

jwtاحراز هویتطول عمر
۵
۱
Mohamad Nowrozie
Mohamad Nowrozie
شاید از این پست‌ها خوشتان بیاید