دیکودر JWT
یک JSON Web Token را جایگذاری کنید تا header و payload آن را بخوانید، ببینید کی منقضی میشود و هر claim را بفهمید. توکن شما هرگز از مرورگرتان خارج نمیشود.
اجرا در مرورگر شمابدون ثبتنامبدون آپلود
رمزگشایی به معنای اعتبارسنجی نیست. هر کسی میتواند هدر و payload یک JWT را بخواند، چون فقط با base64url کدگذاری شدهاند. این ابزار نشان میدهد توکن چه چیزی را ادعا میکند؛ اصالت آن را ثابت نمیکند. همیشه امضا را روی سرور خود بررسی کنید.
هدر
Payload
توضیح claimها
بررسی امضا (اختیاری، HS256/HS384/HS512)
امضای HMAC را با کلید مخفیای که وارد میکنید و با Web Crypto API مرورگرتان بررسی میکند. کلید مخفی هرگز از این صفحه خارج نمیشود. توکنهای RSA/ECDSA به کلید عمومی صادرکننده نیاز دارند و اینجا بررسی نمیشوند.
نحوهٔ استفاده از دیکودر JWT
- توکن را در کادر توکن کدگذاریشده جایگذاری کنید. پیشوند
Bearerاز هدر Authorization نادیده گرفته میشود. - header و payload بلافاصله رمزگشایی و بهصورت JSON قالببندیشده نمایش داده میشوند.
- جدول توضیح claimها را بخوانید:
exp،iatوnbfبه تاریخ تبدیل میشوند، همراه با زمان «منقضی میشود در» / «منقضی شده از». - نوار وضعیت را برای مشکلات انقضا و هشدارها را برای تنظیمات پرخطر مانند
alg: noneبررسی کنید. - در صورت تمایل، کلید مشترک را وارد کنید تا امضای 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 اینجا امن است؟
آیا این ابزار امضای JWT را تأیید میکند؟
چرا توکن من منقضیشده نمایش داده میشود؟
exp نسبت به ساعت کامپیوتر شما در گذشته است. یک توکن جدید درخواست کنید یا با refresh token آن را تمدید کنید. اگر زمانها اشتباه به نظر میرسند، اختلاف ساعت یا مقدار exp نوشتهشده بر حسب میلیثانیه را بررسی کنید.تفاوت JWT، JWS و JWE چیست؟
چرا alg «none» خطرناک است؟
alg: none را رد کنند و فقط الگوریتم مشخصی را که انتظار دارند بپذیرند.