CodeShot
JWT1 دقیقه مطالعه

JWT چیست؟

JSON Web Token؛ فرمت استاندارد و خوداثبات (Self-Contained) برای انتقال ادعاهای هویت (Claim) بین سرور و کلاینت، بدون نیاز به نگهداری Session روی سرور.

چرا مهم است؟

برای APIهایی که چند سرور/Instance دارند، JWT نیاز به Session مشترک (Sticky Session یا Redis) را حذف می‌کند چون هر توکن خودش شامل هویت امضاشده کاربر است.

ساختار JWT

یک JWT از سه بخش جدا با . تشکیل شده: Header.Payload.Signature — مثلاً:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMiLCJyb2xlIjoiQWRtaW4ifQ.4f8a...
  • Header: الگوریتم امضا (مثل HS256).
  • Payload: ادعاها (Claim) مثل sub (شناسه کاربر)، role، exp (زمان انقضا) — این بخش فقط Encode شده، نه رمزنگاری‌شده، پس هرکسی می‌تواند بخواندش.
  • Signature: امضایی که با کلید مخفی سرور تولید شده و تضمین می‌کند Payload دستکاری نشده.

مثال تولید (دات‌نت)

var claims = new[] { new Claim(ClaimTypes.NameIdentifier, user.Id) };
var token = new JwtSecurityToken(
    issuer: "myapp", audience: "myapp",
    claims: claims,
    expires: DateTime.UtcNow.AddMinutes(15),
    signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256));

اشتباه رایج

❌ گذاشتن اطلاعات حساس (رمز عبور، شماره کارت) داخل Payload چون «امضا شده پس امن است» — Payload فقط Base64، نه رمزنگاری‌شده؛ هرکسی توکن را می‌بیند، محتوایش را هم می‌بیند.

منبع و مطالعه بیشتر

خلاصه

JWT شامل Header، Payload و Signature است؛ Payload فقط Encode شده نه رمزنگاری‌شده و امضا فقط تضمین می‌کند دستکاری نشده. هیچ‌وقت داده حساس داخل Payload نگذارید. مرجع کامل: JWT.io Introduction.

این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←