ویژگیهای مهم JWT (فارغ از فریم ورک)
JWT یک توکن امضاشده است که اطلاعات کاربر را درون خودش دارد.
نحوه کار: سرور توکن را میسازد و امضا میکند ← کلاینت آن را در هر درخواست میفرستد ← سرور فقط امضا را چک میکند (بدون دیتابیس).
نکته کلیدی: فقط Encode است، نه Encrypt ← داده حساس داخلش نگذارید.
------------------
ساختار: سه بخش با نقطه جدا میشوند
- Header:
- نوع توکن و الگوریتم امضا
- Payload:
- دادهها (Claims مثل شناسه کاربر، نقش، انقضا)
- Signature:
- امضا برای تأیید دستکاری نشدن
------------------
آیا در میکروسرویسها JWT بهتر است؟
بله، اغلب اوقات. چون Stateless است و هر سرویس بدون کوئری دیتابیس مرکزی میتواند توکن را تأیید کند.
بهترین کاربردها:
- احراز هویت بین میکروسرویسها
- Machine-to-Machine (سرویس به سرویس)
- APIهای عمومی و چندپلتفرمی
- سیستمهای توزیعشده و مقیاسپذیر
بدترین کاربردها:
- نشست کاربران وب (Session جایگزین بهتری است)
- وقتی نیاز به ابطال آنی توکن دارید (مثل logout یا تغییر رمز)
- ذخیره داده حساس در Payload (رمزنگاری نشده)
- توکنهای طولانیمدت بدون Refresh Token
ویژگیهای مهم JWT
Stateless
تمام اطلاعات لازم در خود توکن ذخیره میشود؛ سرور نیازی به ذخیره نشست ندارد.
Self-contained
شامل Header، Payload و Signature است و میتواند Claimهای سفارشی (نقش، مجوزها و...) را حمل کند.
امضاشده (Signed)
با الگوریتمهای HMAC یا RSA امضا میشود؛ دستکاری محتوا قابل تشخیص است.
استاندارد باز (RFC 7519)
مستقل از زبان و پلتفرم است و در هر سیستمعاملی قابل استفاده است.
قابل حمل (Portable)
به راحتی بین سرویسها، دامنهها و میکروسرویسها منتقل میشود.
دارای انقضا (Expiration)
فیلد exp زمان اعتبار توکن را مشخص میکند.
غیرقابل ابطال (Non-revocable)
تا زمان انقضا معتبر میماند؛ ابطال آنی نیاز به Blocklist دارد که Stateless بودن را نقض میکند.
حجیم (Bulky)
به دلیل داشتن Payload، معمولاً بزرگتر از توکنهای ساده است.
رمزنگارینشده (Base64 Encoded)
محتوای Payload فقط Encode شده، نه Encrypt؛ بنابراین نباید داده حساس در آن قرار داد.
آسیبپذیر در صورت لو رفتن
اگر توکن دزدیده شود، مهاجم تا زمان انقضا به آن دسترسی دارد.
@DevTwitter | <Max Shirinzad/>
Post #13263
5.74K
- ❤ 33
- 🍌 12
- 👍 5