§

JWT خود را پیست کنید

تجزیه و تأیید امضا هر دو به صورت محلی اجرا می‌شوند. هیچ‌چیزی درباره توکن به سرور ارسال نمی‌شود.
§

سربرگ

json
§

بار داده

json
§

تأیید امضا

یک secret وارد کنید تا امضا تأیید شود.

توکن‌های JSON Web در سیستم‌های احراز هویت ایران به طور گسترده استفاده می‌شوند — از توکن‌های احراز هویت دو مرحله‌ای بانک‌های ایرانی، تا توکن‌های دسترسی سرویس‌های ابری داخلی، تا رویدادهای امضاشده‌ای که گیرندگان webhook باید تأیید کنند. تیم‌های فین‌تک ایرانی روی همان پاکت RFC 7519 با profile های مناسب کار می‌کنند، جایی که claim ایسوئر به endpoint JWKS شناخته‌شده ارائه‌دهنده اشاره می‌کند. این رمزگشا سه بخش Base64URL را داخل مرورگر جدا می‌کند، header، payload و signature را نمایش می‌دهد، و claims استاندارد مانند `exp`، `iat` و `nbf` را با رندر مناسب منطقه زمانی رمزگشایی می‌کند — بدون اینکه توکن bearer شما تب را ترک کند یا در یک لاگ سمت‌سرور ظاهر شود.

توکن JSON Web چیست؟

یک توکن JSON Web (JWT) یک پاکت فشرده و URL-ایمن برای یک payload کوچک از claims است. این فرمت اعتبارنامه استاندارد برای session های وب بدون حالت، توکن‌های ID OAuth/OIDC، احراز هویت API ماشین به ماشین و magic link های امضاشده است. یک JWT همیشه سه بخش base64url جدا‌شده با نقطه است: header.payload.signature. header و payload از JSON هستند؛ signature یک MAC باینری یا امضای دیجیتال روی دو بخش اول است.

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

وقتی این ابزار یک توکن را رمزگشایی می‌کند، همان مسیر سه‌مرحله‌ای را که هر کتابخانه JWT دنبال می‌کند طی می‌کند:

  1. تقسیم توکن روی نقطه‌ها به دقیقاً سه بخش غیر خالی. هر شکل دیگری نادرست است.
  2. رمزگشایی base64url از بخش‌های ۰ و ۱، سپس JSON.parse هر کدام. header الگوریتم (alg) و نوع توکن (typ) را حمل می‌کند. payload claims را حمل می‌کند (sub، exp، iat، کلیدهای سفارشی).
  3. اگر یک secret ارائه شد، MAC را روی <segment0>.<segment1> با استفاده از الگوریتم در header دوباره محاسبه کنید. بایت‌ها را با بخش سوم مقایسه کنید.
  4. نتیجه تأیید را کنار claims رمزگشایی‌شده نمایش دهید، شامل یک نشانگر انقضا خوانا برای انسان که از claim exp محاسبه شده است.

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

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

  • بدون شبکه: runtime هیچ تابع fetch، XMLHttpRequest یا sendBeacon ندارد. DevTools را باز کنید هنگام رمزگشایی و تأیید — پانل Network ساکت می‌ماند.
  • Web Crypto بومی: تأیید HMAC از crypto.subtle.importKey و crypto.subtle.sign استفاده می‌کند، همان عوامل اولیه‌ای که runtime شما صدا می‌زند.
  • استقرار استاتیک: هر صفحه یک فایل HTML استاتیک تکی بدون endpoint سرور است که بتوان آن را به خطر انداخت. هیچ توکنی برای فاش شدن وجود ندارد چون هیچ سروری برای فاش شدن به آن وجود ندارد.

این ابزار چه چیزی را تأیید می‌کند و چه چیزی را نه؟

نسخه ۱ این ابزار فقط امضاهای خانواده HMAC-SHA را تأیید می‌کند. به طور مشخص:

  • پشتیبانی‌شده: HS256، HS384، HS512. secret مشترک را ارائه دهید و ابزار MAC را دوباره محاسبه و مقایسه می‌کند.
  • هنوز پشتیبانی نمی‌شود: RS256/384/512 (RSA)، ES256/384/512 (ECDSA)، EdDSA و PS256/384/512 (RSA-PSS). اینها به یک کلید عمومی در فرم PEM یا JWK نیاز دارند و عمداً به یک انتشار بعدی موکول شده‌اند.
  • رد شده: alg: "none". ابزار توکن را رمزگشایی می‌کند اما صراحتاً آن را به عنوان ناامن علامت‌گذاری می‌کند — هیچ اعتبارسنجی امضایی در حال انجام نیست، و هر سیستم تولیدی که چنین توکنی را قبول کند یک آسیب‌پذیری جدی دارد.

یک مثال رمزگشایی JWT چه شکلی است؟

توکن نمونه کانونیک RFC 7519 را در فیلد ورودی بالا پیست کنید:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

header به {"alg":"HS256","typ":"JWT"} و payload به {"sub":"1234567890","name":"John Doe","iat":1516239022} رمزگشایی می‌شود. your-256-bit-secret را در پانل تأیید وارد کنید و بررسی امضا معتبر برمی‌گردد. یک کاراکتر از secret را تغییر دهید و نامعتبر برمی‌گردد. هیچ‌کدام از اینها مرورگر شما را ترک نمی‌کند.

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