رمزگشایی JWT
یک JSON Web Token را بچسبانید تا هدر و payload آن را بهصورت JSON مرتب بخوانید. زمان انقضا و صدور به شکل تاریخ نمایش داده میشود و یادداشتی نشان میدهد که توکن در حال حاضر معتبر است یا نه. رمزگشایی بهطور کامل در مرورگر شما انجام میشود و این موضوع وقتی توکن یک اعتبارنامهٔ فعال است اهمیت دارد.
۰ نویسه · ۰ واژه · ۰ خط
۰ نویسه · ۰ واژه · ۰ خط
کاملاً در همین زبانهٔ مرورگر اجرا میشود. متن شما هرگز آپلود یا ذخیره نمیشود.
کلیمهای ثبتشده
هفت نام کلیم تعریفشده در RFC 7519 §4.1. همه اختیاریاند؛ زمانها بر حسب ثانیه از 1970-01-01 UTC هستند.
| کلیم | معنی |
|---|---|
iss | صادرکننده (Issuer): چه کسی توکن را ساخته و امضا کرده است |
sub | موضوع (Subject): کاربر یا نهادی که توکن دربارهٔ اوست |
aud | مخاطب (Audience): توکن برای چه کسی در نظر گرفته شده است |
exp | زمان انقضا: توکن پس از این لحظه رد شود |
nbf | اعتبار از: توکن پیش از این لحظه رد شود |
iat | زمان صدور: توکن چه زمانی ساخته شده است |
jti | شناسهٔ JWT: شناسهٔ یکتا برای جلوگیری از حملهٔ بازپخش |
مقادیر رایج alg
| مقدار alg | معنی |
|---|---|
HS256 | HMAC با SHA-256؛ یک کلید مشترک هم امضا و هم تأیید میکند |
RS256 | امضای RSA PKCS#1 v1.5 با SHA-256؛ کلید خصوصی امضا و کلید عمومی تأیید میکند |
PS256 | RSA-PSS با SHA-256 |
ES256 | ECDSA روی منحنی P-256 با SHA-256؛ امضاهای کوتاه |
EdDSA | امضاهای Ed25519 یا Ed448 |
none | توکن بدون امضا؛ سرورها باید آن را رد کنند |
ساختار یک JSON Web Token
JWT در RFC 7519 (مه 2015) تعریف شده است و پیشنهاد آن این است که مانند واژهٔ انگلیسی «jot» تلفظ شود. شکل امضاشدهٔ رایج آن سه رشتهٔ Base64url است که با نقطه به هم وصل شدهاند: header.payload.signature. بخش header الگوریتم امضا را در alg مشخص میکند، مثل HS256 یا RS256، و اغلب شناسهٔ کلید را در kid میآورد. بخش payload شامل claimها است، یعنی فیلدهای JSON مانند sub (کاربر)، iss (صادرکننده)، aud (مخاطب مورد نظر) و exp و nbf و iat که زمانهایی بر حسب ثانیه از 1 ژانویهٔ 1970 به وقت UTC هستند. رمزگشا این سه مقدار را به وقت محلی شما و ISO 8601 تبدیل میکند و نشان میدهد توکن منقضی شده است، هنوز معتبر نشده است یا در بازهٔ اعتبار خود قرار دارد.
Base64url یک رمزگذاری ساده (encoding) است، نه رمزنگاری، پس هر کسی که توکن را داشته باشد میتواند payload را دقیقاً مثل همین صفحه بخواند. هرگز رمز عبور، شمارهٔ کارت یا اطلاعات محرمانهٔ دیگر را در claimها قرار ندهید. توکنی که پنج بخش جداشده با نقطه دارد، یک JWE یعنی توکن رمزنگاریشده است؛ محتوای آن بدون کلید خوانده نمیشود و رمزگشا همین را اعلام میکند. عبارت «Bearer » ابتدای متن که از هدر Authorization کپی شده باشد، خودکار حذف میشود.
چرا امضا در اینجا تأیید نمیشود
امضا ثابت میکند که header و payload را کسی که کلید را دارد ساخته و از آن زمان تغییر نکردهاند. بررسی آن به همان کلید نیاز دارد: راز مشترک برای الگوریتمهای HMAC مانند HS256، یا کلید عمومی صادرکننده برای RS256 و ES256 و EdDSA. قرار دادن راز امضای محیط واقعی در هر صفحهٔ وب کار درستی نیست، و رمزگشایی که بدون کلید وانمود کند توکن را تأیید میکند اطمینان کاذب میدهد؛ برای همین این ابزار امضا را نشان میدهد اما تأیید نمیکند. آنچه میبینید را ادعای خود توکن بدانید، نه واقعیت قطعی.
تأیید امضا باید روی سرور شما و با یک کتابخانهٔ بهروز انجام شود و الگوریتم مورد انتظار ثابت شده باشد. دو اشتباه تاریخی دلیل آن را روشن میکنند: پذیرفتن alg با مقدار «none» که به هر کس اجازه میدهد توکن بدون امضا جعل کند، و اشتباه گرفتن الگوریتم که در آن سروری که RS256 انتظار دارد فریب میخورد و امضای HS256 را با کلید عمومی بهجای راز HMAC بررسی میکند. رمزگشا برای اشکالیابی است: دیدن اینکه ارائهدهنده چه claimهایی صادر میکند، پیدا کردن aud نادرست، یا فهمیدن اینکه نشست به این دلیل شکست خورده که exp یک دقیقه پیش گذشته است. برای خواندن خام بخشهای Base64url از رمزگشای Base64 استفاده کنید.
پرسشهای متداول
- آیا چسباندن یک توکن دسترسی واقعی در ابزار رمزگشایی JWT امن است؟
- در این صفحه توکن هرگز از مرورگر شما خارج نمیشود. با این حال، توکن معتبر تا زمان انقضا مثل یک رمز عبور کار میکند؛ پس ترجیحاً از توکنهای منقضی یا آزمایشی استفاده کنید و توکنهای فعال را در اسکرینشات و گفتگوها قرار ندهید.
- چرا توکن من با اینکه تازه صادر شده، منقضیشده نشان داده میشود؟
- ابتدا ساعت دستگاه خود را بررسی کنید. بعضی صادرکنندهها برای توکن دسترسی فقط چند دقیقه عمر در نظر میگیرند و توکنی که از لاگ کپی شده ممکن است قدیمیتر از چیزی باشد که به نظر میرسد. اگر exp بهجای ثانیه با میلیثانیه نوشته شده باشد، عکس این اتفاق میافتد و هزاران سال بعد را نشان میدهد.
- آیا کسی میتواند payload توکن JWT من را تغییر دهد؟
- میتوانند آن را ویرایش و دوباره رمزگذاری کنند، اما امضا دیگر مطابقت نخواهد داشت. سروری که امضا را با کلید و الگوریتم درست بررسی میکند، توکن تغییریافته را رد میکند.
- تفاوت JWS و JWE چیست؟
- JWS (RFC 7515) امضاشده است، سه بخش دارد و هر کسی میتواند آن را بخواند. JWE (RFC 7516) رمزنگاریشده است، پنج بخش دارد و فقط دارندهٔ کلید میتواند payload را بخواند.
- آیا خروج از حساب، JWT را باطل میکند؟
- بهتنهایی نه. JWT امضاشده تا زمان exp معتبر میماند، مگر اینکه سرور فهرست ابطال نگه دارد یا رکورد نشست را بررسی کند؛ به همین دلیل معمولاً برای توکنهای دسترسی عمر کوتاه در نظر میگیرند.