توسعه‌دهنده 🔒 در مرورگر اجرا می‌شود — داده‌ای ارسال نمی‌شود

رمزگشای JWT

JSON Web Token را محلی رمزگشایی کنید و امضایش را با کلید محرمانه یا عمومی بررسی کنید، بدون ارسال چیزی.

توکن JWT
کلید محرمانه یا عمومی
کلید در مرورگر خود شما استفاده می‌شود و هرگز جایی فرستاده نمی‌شود.
رمزگشایی‌شده
هدر

          
        
پی‌لود

        
امضا

برای آزمودن یک سرویس، توکن خودتان را امضا کنید. همه‌چیز در همین صفحه محاسبه می‌شود.

کلید امضا

کلید و توکن ساخته‌شده در مرورگر شما می‌مانند؛ هیچ‌کدام جایی فرستاده نمی‌شوند و در پیوند هم‌رسانی هم نمی‌آیند.

رمزگشای JWT — خواندن آنلاین محتوای JSON Web Token

توکن JWT را بچسبانید تا این ابزار آن را به سه بخش تقسیم کند و هدر و پی‌لود را به شکل JSON خوانا نشان دهد. این سریع‌ترین راه برای پاسخ به سؤال‌هایی است که هنگام اشکال‌زدایی احراز هویت پیش می‌آید: چه کسی این توکن را صادر کرده، برای چه کسی است، با چه الگوریتمی امضا شده و آیا منقضی شده است یا نه.

رمزگشایی کاملاً داخل مرورگر شما انجام می‌شود. اینجا این موضوع از بیشتر ابزارها مهم‌تر است، چون JWT یک اعتبارنامه زنده است: هر کسی یک توکن معتبر را به دست بیاورد معمولاً تا زمان انقضا می‌تواند به‌جای صاحبش عمل کند. هیچ‌چیزی که در این صفحه می‌چسبانید آپلود، ثبت یا ذخیره نمی‌شود.

نمودار: یک JWT که در دو نقطه‌اش به هدر، Payload و امضا تقسیم می‌شود؛ هدر و Payload به JSON خوانا تبدیل می‌شوند و امضا یک HMAC روی هر دو است.eyJhbGciOiJIUzI1NiIs….eyJzdWIiOiIxMjM0NTY3….2N-E3ZkgLmbR…هدرPayload (ادعاها)امضا{ "alg": "HS256", "typ": "JWT"}{ "sub": "1234567890", "name": "Ada Lovelace", "iat": 1700000000, "exp": 1700003600}HMACSHA256( header + "." + payload, secret)JSON با Base64URL؛ همه می‌توانند بخوانندJSON با Base64URL؛ همه می‌توانند بخوانندبا کلید مخفی بررسی می‌شود
JWT سه رشته‌ی Base64URL است که با نقطه به هم وصل شده‌اند. هدر و Payload همان JSON معمولی‌اند که هر کسی می‌تواند رمزگشایی کند؛ پس هیچ رازی نباید داخل توکن باشد. فقط امضا، وقتی با کلید بررسی شود، نشان می‌دهد توکن تغییر نکرده است.

JSON Web Token چیست

یک JWT از سه قطعه Base64URL تشکیل شده که با نقطه به هم وصل شده‌اند: header.payload.signature. هدر الگوریتم امضا را مشخص می‌کند، پی‌لود حامل Claimهاست یعنی ادعاهایی که صادرکننده درباره کاربر یا کلاینت مطرح می‌کند، و امضا ثابت می‌کند دو بخش اول را کسی ساخته که کلید را در اختیار داشته است. چون هدر و پی‌لود فقط کد شده‌اند و رمزنگاری نشده‌اند، هر کسی می‌تواند آنها را بخواند. تنها چیزی که محافظت می‌شود امضاست.

روش رمزگشایی JWT در همین صفحه

  1. توکن را از هدر Authorization: Bearer، یک کوکی، یک آدرس بازگشتی یا کلاینت API خود کپی کنید.
  2. رشته کامل header.payload.signature را در کادر ورودی بچسبانید.
  3. روی رمزگشایی بزنید تا هر دو شیء JSON نمایش داده شوند.
  4. اگر درخواست رد شده است، اول exp و بعد aud و iss را بررسی کنید.

این صفحه دیگر چه می‌کند

توکن همان حین تایپ خوانده می‌شود، پس کادرها پیش از آنکه سراغ دکمه بروید پر می‌شوند. زیر هدر و پی‌لود رمزگشایی‌شده، هر فیلد در جدولی می‌آید با توضیح ساده‌ای از کارش، و خطی بالای آن‌ها exp و nbf را به جمله بدل می‌کند: سه روز پیش منقضی شده، پنجاه‌وهشت دقیقه دیگر منقضی می‌شود، هنوز معتبر نیست.

  • نمونه یک توکن آزمایشی را با کلید محرمانه‌اش بار می‌کند تا پیش از چسباندن توکن خودتان، یک بررسی موفق را ببینید.
  • بررسی امضا کلید محرمانه، کلید عمومی PEM، یک JWK یا کل یک JWKS را می‌پذیرد. سندی را که آدرس /.well-known/jwks.json صادرکننده برمی‌گرداند بچسبانید تا کلیدی که kid توکن نام می‌برد خودکار انتخاب شود؛ صفحه همچنان هیچ درخواستی از جانب خودش نمی‌فرستد. اگر صادرکننده مورد انتظار و مخاطب مورد انتظار را هم پر کنید، امضای معتبر همان‌طور بررسی می‌شود که یک سرور بررسی می‌کند: iss متفاوت، یا audی که مقدار شما را ندارد، نتیجه را قرمز می‌کند.
  • ساخت توکن توکن خودتان را با هر یک از دوازده الگوریتم امضا می‌کند؛ صفحه تولید JWT روی همین زبانه باز می‌شود.
  • کد بررسی سمت سرور را در هشت زبان می‌نویسد، متناسب با الگوریتمی که در هدر توکن شماست.
  • دو صفحه دیگر همین ابزار را روی یک پرسش باز می‌کنند: منقضی شده یا نه و چرا پذیرفته نمی‌شود.

Claimهای استاندارد و معنای آنها

Claimمعنیدلیل رایج خطا
issصادرکننده توکنوقتی توکن محیط تست به محیط اصلی فرستاده می‌شود مطابقت ندارد
subموضوع؛ معمولاً شناسه کاربر یا سرویسدر توکن‌هایی که برای یک کلاینت و نه یک شخص صادر شده‌اند خالی است
audمخاطب؛ همان APIای که باید توکن را بپذیردرایج‌ترین دلیل خطای ۴۰۱ با توکنی که ظاهراً معتبر است
expزمان انقضا به شکل تایم‌استمپ یونیکسگذشته است یا ساعت سرور اختلاف دارد
nbfپیش از این زمان معتبر نیستتوکن چند ثانیه زودتر از موعد استفاده شده است
iatزمان صدورمبنای سیاست حداکثر عمر توکن و بازه ابطال
jtiشناسه یکتای توکنبرای مسدود کردن یک توکن مشخص لازم است

رمزگشایی با تأیید اعتبار فرق دارد

این همان نکته‌ای است که بیشتر افراد را به اشتباه می‌اندازد. خواندن یک توکن به شما می‌گوید چه ادعایی دارد، نه اینکه آن ادعا درست است یا نه. تأیید اعتبار یعنی محاسبه دوباره امضا با Secret یا کلید عمومی صادرکننده و مقایسه آن، به‌علاوه بررسی انقضا و مخاطب. هر رمزگشایی، پی‌لود یک توکن جعلی را به همان راحتی توکن واقعی نشان می‌دهد؛ پس هرگز تصمیم مجوزدهی را فقط بر پایه محتوای رمزگشایی‌شده نگیرید و همیشه سمت سرور با یک کتابخانه به‌روز اعتبارسنجی کنید.

عیب‌یابی توکنی که کار نمی‌کند

  • خطای ۴۰۱ با توکن معتبر: مقدار aud را با آنچه API انتظار دارد و iss را با آدرس صادرکننده تنظیم‌شده مقایسه کنید. هر دو را در صادرکننده مورد انتظار و مخاطب مورد انتظار وارد کنید و بررسی امضا را بزنید: نتیجه مقداری را که توکن واقعاً دارد نشان می‌دهد.
  • انقضای فوری: مقدار exp را با مبدل تایم‌استمپ یونیکس تبدیل کنید و با ساعت سرور بسنجید، نه ساعت لپ‌تاپ خودتان.
  • خطای قطعه نامعتبر: توکن ناقص شده، در مسیر URL-encode شده یا هنگام کپی یک خط جدید وارد آن شده است.
  • شکست تأیید امضا: کلید تعویض شده، شناسه کلید اشتباه استفاده شده یا توکن در محیط دیگری امضا شده است.
  • مقدار alg برابر none: آن را رد کنید. این مقدار یعنی توکن امضا ندارد و یک حمله کلاسیک به اعتبارسنجی‌های سهل‌انگارانه است.

عادت‌های امنیتی که ارزش دارند

  • هرگز اطلاعات شخصی، شناسه‌های داخلی یا داده محرمانه را در پی‌لود نگذارید؛ این بخش عمداً خواندنی است.
  • عمر توکن دسترسی را کوتاه نگه دارید و برای نشست‌های طولانی از Refresh Token استفاده کنید.
  • توکن‌ها را فقط روی HTTPS منتقل کنید و تا جای ممکن کوکی‌های Secure و HttpOnly را به Storage مرورگر ترجیح دهید.
  • کلیدهای امضا را طبق برنامه تعویض کنید و از طریق یک نقطه JWKS منتشر کنید تا کلاینت‌ها همراه شوند.
  • هر توکنی را که در یک ابزار آنلاین چسبانده‌اید لو رفته فرض کنید؛ دقیقاً به همین دلیل این ابزار هیچ‌جا چیزی نمی‌فرستد.

بدون اینترنت هم کار می‌کند

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

رمزگشایی JWT در کد یا خط فرمان

کجاچطور
JavaScript (npm)import { jwtDecode } from 'jwt-decode'; jwtDecode(token) - فقط پی‌لود، بدون تأیید
Python (PyJWT)jwt.decode(token, options={'verify_signature': False}) برای خواندن، یا با دادن کلید برای تأیید
Bashecho $TOKEN | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null - Base64URL پدینگ ندارد، پس پی‌لود کوتاه ممکن است به == در انتها نیاز داشته باشد
کنسول مرورگرJSON.parse(atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')))

همه این روش‌ها توکن را بدون بررسی امضا می‌خوانند - برای دیباگ خوب است و برای تصمیم‌گیری درباره دسترسی اشتباه؛ بخش بالا را ببینید.

ابزارهای مرتبط

توکن‌ها میان چند قالب مختلف قرار می‌گیرند. قطعه‌های خام را با رمزگشای Base64 بخوانید، پی‌لود را با فرمت‌کننده JSON مرتب کنید، مقدارهای exp و iat را با مبدل تایم‌استمپ به تاریخ تبدیل کنید و توکنی را که از آدرس بیرون کشیده‌اید با رمزگشای URL پاک‌سازی کنید.

آموزش‌های مرتبط