دیکودر JWT

یک JSON Web Token را جای‌گذاری کنید تا header و payload آن را بخوانید، ببینید کی منقضی می‌شود و هر claim را بفهمید. توکن شما هرگز از مرورگرتان خارج نمی‌شود.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

رمزگشایی به معنای اعتبارسنجی نیست. هر کسی می‌تواند هدر و payload یک JWT را بخواند، چون فقط با base64url کدگذاری شده‌اند. این ابزار نشان می‌دهد توکن چه چیزی را ادعا می‌کند؛ اصالت آن را ثابت نمی‌کند. همیشه امضا را روی سرور خود بررسی کنید.

هدر

Payload


      

بررسی امضا (اختیاری، HS256/HS384/HS512)

امضای HMAC را با کلید مخفی‌ای که وارد می‌کنید و با Web Crypto API مرورگرتان بررسی می‌کند. کلید مخفی هرگز از این صفحه خارج نمی‌شود. توکن‌های RSA/ECDSA به کلید عمومی صادرکننده نیاز دارند و اینجا بررسی نمی‌شوند.

نحوهٔ استفاده از دیکودر JWT

  1. توکن را در کادر توکن کدگذاری‌شده جای‌گذاری کنید. پیشوند Bearer از هدر Authorization نادیده گرفته می‌شود.
  2. header و payload بلافاصله رمزگشایی و به‌صورت JSON قالب‌بندی‌شده نمایش داده می‌شوند.
  3. جدول توضیح claimها را بخوانید: exp، iat و nbf به تاریخ تبدیل می‌شوند، همراه با زمان «منقضی می‌شود در» / «منقضی شده از».
  4. نوار وضعیت را برای مشکلات انقضا و هشدارها را برای تنظیمات پرخطر مانند alg: none بررسی کنید.
  5. در صورت تمایل، کلید مشترک را وارد کنید تا امضای HS256، HS384 یا HS512 را به‌صورت محلی تأیید کنید.

داخل یک JWT چیست؟

یک JSON Web Token (RFC 7519) سه رشتهٔ base64url است که با نقطه به هم متصل شده‌اند: header.payload.signature. header الگوریتم امضا (alg) و نوع توکن را مشخص می‌کند. payload شامل claimهاست، مثلاً اینکه کاربر کیست و توکن کی منقضی می‌شود. signature روی دو بخش اول با یک کلید مخفی یا کلید خصوصی محاسبه می‌شود.

رمزگشایی به معنای تأیید نیست

header و payload فقط کدگذاری شده‌اند، نه رمزنگاری، بنابراین هر کسی که توکن را داشته باشد می‌تواند آن‌ها را بخواند. به همین دلیل هرگز نباید رمز عبور یا اطلاعات محرمانه را در payload یک JWT قرار دهید. رمزگشایی به شما می‌گوید توکن چه می‌گوید. تأیید امضا، که معمولاً روی سرور API با کتابخانه‌ای مانند jose یا PyJWT انجام می‌شود، ثابت می‌کند چه کسی آن را صادر کرده و تغییر نکرده است. سرور همچنین باید exp، nbf، iss و aud را بررسی کند و الگوریتم‌های غیرمنتظره را رد کند.

راهنمای سریع claimهای ثبت‌شده

Claimمعنا
issصادرکننده (Issuer): چه کسی توکن را ساخته و امضا کرده است
subموضوع (Subject): معمولاً شناسهٔ کاربر
audمخاطب (Audience): توکن برای کدام API در نظر گرفته شده است
expزمان انقضا، بر حسب ثانیه از مبدأ زمانی یونیکس
nbfپیش از این زمان معتبر نیست
iatزمان صدور
jtiشناسهٔ یکتای توکن، مفید برای فهرست‌های ابطال

دیباگ خطاهای «token expired»

اگر یک API توکنی را که تازه به نظر می‌رسد رد می‌کند، exp و nbf را با ساعت سرور مقایسه کنید. اختلاف کوچک ساعت بین ماشین‌ها رایج است، بنابراین بیشتر کتابخانه‌ها 30 تا 60 ثانیه تلورانس می‌دهند. همچنین بررسی کنید که exp بر حسب ثانیه باشد: مقدار میلی‌ثانیه یک باگ رایج است و انقضا را هزاران سال به آینده می‌برد.

پرسش‌های متداول

آیا جای‌گذاری JWT محیط production اینجا امن است؟
رمزگشایی کاملاً در مرورگر شما و با JavaScript انجام می‌شود. توکن آپلود، ثبت یا ذخیره نمی‌شود. با این حال، مانند هر اعتبارنامهٔ دیگری با توکن‌های فعال با احتیاط رفتار کنید و هنگام اشتراک‌گذاری اسکرین‌شات، توکن‌های منقضی یا آزمایشی را ترجیح دهید.
آیا این ابزار امضای JWT را تأیید می‌کند؟
رمزگشایی به‌تنهایی خیر. می‌توانید در صورت تمایل توکن‌های HS256، HS384 و HS512 را با وارد کردن کلید مشترک تأیید کنید؛ HMAC به‌صورت محلی با Web Crypto API محاسبه می‌شود. توکن‌های RS256 و ES256 باید روی سرور شما با کلید عمومی صادرکننده تأیید شوند.
چرا توکن من منقضی‌شده نمایش داده می‌شود؟
claim exp نسبت به ساعت کامپیوتر شما در گذشته است. یک توکن جدید درخواست کنید یا با refresh token آن را تمدید کنید. اگر زمان‌ها اشتباه به نظر می‌رسند، اختلاف ساعت یا مقدار exp نوشته‌شده بر حسب میلی‌ثانیه را بررسی کنید.
تفاوت JWT، JWS و JWE چیست؟
JWT قالب claimهاست. JWS یک JWT امضاشده با سه بخش است و همان چیزی است که این ابزار رمزگشایی می‌کند. JWE یک JWT رمزنگاری‌شده با پنج بخش است؛ payload آن بدون کلید رمزگشایی قابل خواندن نیست.
چرا alg «none» خطرناک است؟
هر کسی می‌تواند یک توکن بدون امضا را جعل کند. سرورها باید alg: none را رد کنند و فقط الگوریتم مشخصی را که انتظار دارند بپذیرند.

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