نکات کلیدی
- 01هر JWT را رمزگشایی کنید و header، payload و standard claims را در یک بچسباندگی بررسی کنید.
- 02exp، nbf و iat claimsها به timestampهای قابلخواندگی برای انسان با tagهای valid/expired تبدیل میشوند.
- 03رمزگشایی کاملاً محلی است — برای بچسباندگی tokenهای real production هنگام اشکالزدایی محفوظ است.
- 04رمزگشای امضاها را تایید نمیکند — باید روی سمت سرور با کلید issuer اتفاق بیفتد.
چرا شما یک JWT رمزگشا نیاز دارید
JSON Web Tokenها مانند نویز تصادفی به نظر میرسند تا زمانی که بدانید آنها سه بخش Base64URL-رمزگذاریشده جداشدهتوسط نقطه هستند. بخش اول header است (الگوریتم و نوع توکن)، دوم payload است (claimsها: user ID، نقشها، expiry) و سوم امضا است. هنگام اشکالزدایی یک مسئله اثباتهویت، یک نشست منقضی یا یک پیوند OAuth شکسته، اولین کاری که نیاز دارید انجام دهید payload را بخوانید.
انجام این کار توسط دست به معنی تقسیم کردن روی نقطه، رمزگشایی Base64URL و سپس تبدیل Unix timestampها به تاریخهای قابلخواندگی برای انسان است. رمزگشای JWT Handytool همه اینها را خودکار انجام میدهد و validity tagها را بر روی timing claims اضافه میکند تا بتوانید در یک نگاه ببینید آیا token هنوز فعال است.
چگونه یک JWT Token را رمزگشایی کنید
- 01
JWT را کپی کنید
توکن را از DevTools مرورگر خود (Application > Cookies یا Authorization header panel Network)، از فایل لاگ یا از API کلاینت خود بگیرید.
- 02
آن را به رمزگشا بچسبانید
توکن کامل — از جمله تمام سه بخش جداشدهتوسط نقطه — را در جعبه ورودی بچسبانید. رمزگشا بخشها را خودکار شناسایی میکند.
- 03
header و payload را بخوانید
ابزار توکن را تقسیم میکند و header (الگوریتم، نوع) و payload (تمام claimها) را به عنوان JSON فرمتشده pretty-print میکند.
- 04
timing claimها را بررسی کنید
exp (expiry)، nbf (not-before) و iat (issued-at) Unix timestampهای فوری به ISO dateها تبدیل میشوند. رمزگشا exp را به عنوان سبز (valid) یا قرمز (expired) نسبت به زمان محلی فعلی شما tag میکند.
Standard JWT Claims توضیح دادهشده
این نامهای registered claim در بیشتر JWTها ظاهر میشوند.
- 01iss (Issuer) — کسی را شناسایی میکند که token را ایجاد کرد، معمولاً یک URL یا نام سرویس.
- 02sub (Subject) — principal که token نمایندگی میکند، معمولاً یک user ID.
- 03aud (Audience) — recipient(s) منظور شده token؛ سرور شما باید tokenهای منظورشده برای دیگران را رد کند.
- 04exp (Expiration) — Unix timestamp بعد از آن token باید رد شود.
- 05nbf (Not Before) — Unix timestamp قبل از آن token باید رد شود.
- 06iat (Issued At) — Unix timestamp زمان token minted شد؛ برای تشخیص tokenهای stale مفید است.
برای بچسباندگی Real Tokenها هنگام Debugging محفوظ
JWT رمزگشایی به طور کامل در مرورگر شما با استفاده از تابع بومی atob و JSON.parse اتفاق میافتد. هیچ چیز به هیچ سرور منتقل نمیشود — توکن شما به طور محلی رمزگشایی و نمایش داده میشود. میتوانید به طور ایمن real access tokenها و session tokenهای development یا staging environmentها را برای اشکالزدایی جریانهای اثباتهویت بچسبانید.
با این حال، JWTها را مانند رمزهای عبور رفتار کنید. آنها برای دسترسی کامل به سیستمهای شما برای lifetime کامل خود دسترسی دارند. production tokenهای accountهای high-privilege را تا زمانی که از تضمینهای حریم خصوصی ابزار اطمینان داشته باشید به هیچ ابزار بچسبانید — و اگر شامل اعتقاد دارید یک token را rotate کنید.
سوالات متداول JWT رمزگشا
JWT چیست؟
JSON Web Token یک فرمت جمع و جور URL-safe است که شامل سه بخش Base64URL (header، payload، signature) جداشدهتوسط نقطه است. JWTها claimها — assertionهای درباره یک user یا session — را حمل میکند و برای اثباتهویت، مجوز و دسترسی API استفاده میشوند.
آیا این رمزگشا امضای JWT را تایید میکند؟
نه. رمزگشا فقط header و payload را تجزیه میکند. تایید امضا کلید سری یا public issuer را میطلبد و باید در کد برنامه خود با استفاده از trusted library اتفاق بیفتد.
آیا برای بچسباندگی real access token در اینجا محفوظ است؟
رمزگشایی کاملاً محلی است — توکن هرگز منتقل نمیشود. با این حال، JWTها real access دارند، بنابراین آنها را مانند رمزهای عبور رفتار کنید. آنها را به اشتراک نگذارید، آنها را به source control commit نکنید و اگر نمیدانید آنها نمایاندگی قدیم شدند آنها را rotate کنید.
exp claim چه معنی دارد؟
exp expiration timestamp است — یک Unix عدد صحیح نمایندگی لحظه توکن باید معتبر بودن را متوقف کند. رمزگشا آن را به یک human-readable ISO date تبدیل میکند و آن را valid یا expired نسبت به زمان محلی فعلی شما tag میکند.
چرا JWT payload بدون کلید قابلدیدار است؟
JWT payloads Base64URL-رمزگذاریشده هستند، نه رمزنگاریشده. آنها خوانایی برای طراحی شدهاند — امضا فقط اثبات اصالت، نه محرمانگی میدهد. هرگز واقعاً secret data را در یک JWT payload قرار ندهید مگر اینکه شما JSON Web Encryption (JWE) استفاده کنید.
آیا رمزگشا رایگان است؟
بله. Handytool رایگان است بدون ثبتنام، بدون محدودیت نرخ و بدون جمعآوری داده.