ساختار و اجزای تشکیلدهنده یک توکن وب JSON
یک توکن وب JSON که به اختصار JWT نامیده میشود، یک استاندارد باز (RFC 7519) برای انتقال امن اطلاعات بین اعضا به صورت یک شیء JSON است. این توکن از سه بخش مجزا تشکیل شده است که با نقطه (.) از یکدیگر جدا میشوند:
- هدر (Header): حاوی اطلاعاتی درباره نوع توکن و الگوریتم رمزنگاری مورد استفاده است.
- پیلود (Payload): حاوی ادعاها (Claims) یا همان اطلاعات کاربری و عملیاتی است که انتقال مییابند.
- امضا (Signature): برای تأیید این که فرستنده توکن همان کسی است که ادعا میکند و همچنین اطمینان از عدم تغییر پیام در طول مسیر استفاده میشود.
یک توکن نمونه به صورت سه بخش متوالی از رشتههای کدگذاریشده است که با نقطه از هم تفکیک شدهاند. ابزار رمزگشای JWT این سه بخش را شناسایی کرده و بخشهای متنی را به ساختار قابل خواندن تبدیل میکند.
هدر در JWT و ادعاهای رایج آن
بخش اول هر توکن JWT، هدر آن است. این بخش به صورت یک شیء JSON است که با روش Base64URL کدگذاری شده است. هدر معمولاً شامل دو فیلد کلیدی است:
- الگوریتم (
alg): الگوریتم رمزنگاری مورد استفاده برای ایجاد امضا را مشخص میکند، مانند HS256 یا RS256. - نوع (
typ): نوع توکن را مشخص میکند که در اکثر موارد مقدار آن برابر با JWT است.
ابزار رمزگشای JWT پس از دریافت توکن، این بخش را رمزگشایی کرده و خروجی را به صورت هدر (Header) در قالب JSON مرتبشده نمایش میدهد تا الگوریتم و نوع توکن به راحتی قابل بررسی باشند.
پیلود در JWT و ادعاهای استاندارد
بخش دوم توکن، پیلود یا بدنه آن است که حاوی ادعاها (Claims) است. ادعاها اظهاراتی درباره یک موجودیت (مانند کاربر) و دادههای اضافی هستند. این ادعاها به سه دسته عمومی، خصوصی و ثبتشده تقسیم میشوند. ادعاهای ثبتشده و استاندارد که در تحلیل توکنها اهمیت بالایی دارند عبارتند از:
iat(صادر شده در): زمان صدور توکن را به صورت timestamp مشخص میکند.exp(تاریخ انقضا): زمان پایان اعتبار توکن را تعیین میکند. پس از این زمان، توکن دیگر نباید برای دسترسی پذیرفته شود.nbf(نه قبل از): زمانی را مشخص میکند که توکن قبل از آن معتبر نیست.sub(موضوع): هویت کاربر یا موجودیتی که توکن برای او صادر شده است.
این اطلاعات در بخش پیلود (Payload) به صورت ساختار JSON نمایش داده میشوند تا توسعهدهندگان و کارشناسان امنیت بتوانند محتوای توکن را ارزیابی کنند.
نحوه کارکرد ادعاهای زمان انقضا و صدور
مدیریت چرخه عمر توکنها به شدت به ادعاهای زمانمحور وابسته است. ادعای iat نشاندهنده زمان دقیق تولید توکن است، در حالی که ادعای exp مشخص میکند که این توکن تا چه زمانی قابل استفاده است.
ابزار رمزگشای JWT با بررسی این فیلدها، وضعیت زمانی توکن را تحلیل کرده و یکی از نشانهای وضعیت زیر را نمایش میدهد:
- معتبر: زمانی که توکن صادر شده و زمان فعلی سیستم قبل از زمان انقضای درجشده در توکن باشد.
- منقضیشده: زمانی که زمان فعلی سیستم از زمان درجشده در ادعای
expعبور کرده باشد. - هنوز معتبر نیست: زمانی که توکن برای استفاده در آینده برنامهریزی شده و زمان فعلی هنوز به زمان شروع اعتبار آن نرسیده است.
- بدون انقضا: زمانی که توکن فاقد ادعای
expدر بخش پیلود باشد.
تفاوت بین رمزگشایی و تأیید اعتبار JWT
یک تمایز فنی بسیار مهم در کار با توکنهای وب، تفاوت میان رمزگشایی (Decoding) و تأیید اعتبار (Verification) است:
| ویژگی | رمزگشایی (Decoding) | تأیید اعتبار (Verification) |
|---|---|---|
| هدف | تبدیل رشته Base64URL به متن خوانای JSON | اطمینان از صحت صادرکننده و عدم دستکاری توکن |
| نیاز به کلید | بدون نیاز به کلید خصوصی، عمومی یا رمز مشترک | نیازمند کلید عمومی یا رمز مشترک (Signing Secret) |
| امنیت | اطلاعات برای هر کسی که به توکن دسترسی دارد قابل خواندن است | از جعل توکن توسط افراد غیرمجاز جلوگیری میکند |
| عملکرد ابزار | این ابزار فقط هدر و پیلود را رمزگشایی میکند | این ابزار امضا را تأیید نمیکند و کلیدی دریافت نمیکند |
عدم تأیید امضای توکن در محیطهای عملیاتی یک آسیبپذیری امنیتی شدید ایجاد میکند. اگر یک سیستم صرفاً به رمزگشایی پیلود اکتفا کند و امضا را تأیید نکند، مهاجمان میتوانند با تغییر مقادیر پیلود (مانند تغییر نقش کاربر به مدیر) و بدون داشتن کلید امضا، به سیستم نفوذ کنند.
نقش کدگذاری Base64URL و فرمت JSON در توکنها
توکنهای JWT برای انتقال در بستر پروتکلهای وب مانند HTTP طراحی شدهاند. به همین دلیل، ساختار متنی JSON هدر و پیلود مستقیماً ارسال نمیشود، بلکه ابتدا به فرمت Base64URL کدگذاری میگردد.
کدگذاری Base64URL نسخهای اصلاحشده از Base64 استاندارد است که کاراکترهای غیرمجاز در URLها (مانند + و /) را با کاراکترهای ایمن (- و _) جایگزین میکند و کاراکتر مساوی (=) را حذف مینماید. این امر انتقال توکن را در هدرهای HTTP و رشتههای پرسوجو (Query Strings) بدون نیاز به کدگذاری اضافی تسهیل میکند. ابزار رمزگشا وظیفه دارد این فرآیند را معکوس کرده و رشتههای Base64URL را مجدداً به ساختار استاندارد JSON تبدیل کند.
حریم خصوصی و پردازش محلی دادهها
هنگام کار با توکنهای امنیتی و هویتی، حفظ محرمانگی دادهها اهمیت بالایی دارد. فرآیند پردازش و رمزگشایی توکنها در این ابزار به شرح زیر است:
- پردازش در مرورگر: تمام عملیات تجزیه رشته، رمزگشایی Base64URL و اعتبارسنجی ساختار JSON کاملاً درون مرورگر کاربر انجام میشود.
- عدم انتقال داده: توکن شما در مرورگر خودتان رمزگشایی میشود. هیچ اطلاعاتی در BroBroGo آپلود نمیشود.
- امنیت اطلاعات حساس: از آنجا که هیچ درخواستی به سرورهای خارجی ارسال نمیشود، اطلاعات حساس موجود در پیلود توکن در محیط محلی دستگاه شما باقی میماند.
راهنمای خطاها و قوانین ابزار
ابزار رمزگشای JWT قوانین مشخصی را برای اعتبارسنجی ورودیها اعمال میکند و در صورت بروز مشکل، خطاهای دقیقی را نمایش میدهد:
- آماده: در صورتی که فیلد ورودی خالی باشد، ابزار در وضعیت "آماده. برای رمزگشایی، یک توکن JWT را جایگذاری کنید." باقی میماند.
- فرمت نامعتبر: اگر ورودی فاقد سه بخش مجزا باشد، خطای "توکن JWT معتبر نیست — ساختار باید شامل سه بخش جدا شده با نقطه باشد." نمایش داده میشود.
- خطای کدگذاری هدر: در صورت وجود مشکل در ساختار Base64URL بخش اول، خطای "امکان رمزگشایی هدر وجود نداشت — Base64URL نامعتبر است." صادر میشود.
- خطای کدگذاری پیلود: در صورت خرابی Base64URL بخش دوم، خطای "امکان رمزگشایی پیلود وجود نداشت — Base64URL نامعتبر است." نمایش داده میشود.
- خطای ساختار JSON هدر: اگر هدر رمزگشایی شود اما ساختار JSON استاندارد نداشته باشد، پیام "هدر ساختار JSON معتبری ندارد." نمایش داده میشود.
- خطای ساختار JSON پیلود: در صورت نامعتبر بودن فرمت JSON بدنه، پیام "پیلود ساختار JSON معتبری ندارد." نمایش داده میشود.
- طول بیش از حد: اگر رشته ورودی بسیار طولانی باشد، سیستم خطای "این رشته برای یک توکن JWT واقعی بیش از حد طولانی است." را نشان میدهد.
در صورت بروز هرگونه خطا، بخشهای رمزگشاییشده پنهان میشوند تا از نمایش اطلاعات نادرست جلوگیری شود. همچنین با کلیک بر روی دکمه پاک کردن، تمرکز (Focus) به طور خودکار به فیلد ورودی بازمیگردد.
سوالات متداول (FAQ)
آیا چسباندن JWT من در اینجا امن است؟
بله. رمزگشایی کاملاً در مرورگر شما انجام میشود — توکن شما هرگز به BroBroGo ارسال نمیشود.
آیا این ابزار امضا (signature) را تأیید میکند؟
خیر. این ابزار فقط هدر و پیلود (payload) را برای خواندن شما رمزگشایی میکند. تأیید امضا به کلید خصوصی یا عمومی نیاز دارد که این ابزار هرگز آن را از شما نمیخواهد.
چگونه بفهمم توکن من منقضی شده است؟
رمزگشا فیلد exp را میخواند و یک نشان وضعیت — معتبر، منقضیشده، هنوز معتبر نشده یا بدون انقضا — را در کنار توکن رمزگشاییشده نشان میدهد. این ابزار فقط ادعای exp را بررسی میکند — امضا، صادرکننده یا مخاطب را تأیید نمیکند.