بررسی انقضای JWT
کلیم exp یک مهر زمانی یونیکس است و در نگاه اول چیزی نمیگوید. توکن را بچسبانید تا این صفحه آن را به تاریخ، به منطقه زمانی خودتان و به یک جمله روشن تبدیل کند.
برای آزمودن یک سرویس، توکن خودتان را امضا کنید. همهچیز در همین صفحه محاسبه میشود.
کلید و توکن ساختهشده در مرورگر شما میمانند؛ هیچکدام جایی فرستاده نمیشوند و در پیوند همرسانی هم نمیآیند.
این توکن را در کد خودتان بررسی کنید. نمونهکد از الگوریتمی که در هدر آمده پیروی میکند.
ببینید یک JSON Web Token کی منقضی میشود
یک درخواست ردشده بهندرت زیاد معما میماند: نخستین چیزی که ارزش نگاه کردن دارد این است که توکن هنگام رسیدن هنوز زنده بوده یا نه. مشکل اینجاست که پاسخ بهشکل چیزی مثل 1790208000 ذخیره شده و هیچکس آن را در یک نگاه نمیخواند. توکن را بچسبانید تا خط بالای هدرِ رمزگشاییشده همان را با کلمه بگوید — دو روز پیش منقضی شده، پنجاهوهشت دقیقه دیگر منقضی میشود، هنوز معتبر نیست — و جدول کلیمها تاریخ کامل را به وقت خودتان بدهد.
همه چیز در همین صفحه رمزگشایی میشود. اینجا این نکته مهمتر است، چون توکن یک گواهی زنده است: هر کس یک توکن معتبر داشته باشد معمولاً میتواند تا همان لحظهای که این صفحه از آن حرف میزند بهجای صاحبش عمل کند. هیچچیزی که میچسبانید بارگذاری، ثبت یا نگهداری نمیشود.
سه کلیمی که زمان را حمل میکنند
| کلیم | معنا | مقدار نادرست چه شکلی است |
|---|---|---|
exp | توکن از این لحظه به بعد پذیرفته نمیشود | خطای ۴۰۱ که هر بار پس از ورود، در فاصلهای ثابت پیدا میشود |
nbf | پیش از این لحظه اجازه استفاده ندارد | توکن تازهساختهای که در ثانیههای نخست رد میشود |
iat | زمان صدور | قاعدههای بیشینه عمر از آن استفاده میکنند؛ توکن قدیمی اما منقضینشده هم رد میشود |
هر سه ثانیه از مبدأ یونیکساند، نه میلیثانیه — یک JWT که با Date.now() جاوااسکریپت دستی نوشته شده باشد سر از سال ۵۸٬۰۰۰ درمیآورد و هیچجا پذیرفته نمیشود. اگر بخواهید یکی از این عددها را جداگانه تبدیل کنید، مبدل مهر زمانی همان حساب را در هر دو جهت انجام میدهد.
منقضی شده یا فقط ناهماهنگ؟
دو ماشین بهندرت سر ثانیه با هم میخوانند، پس هر بررسیکننده عاقلی کمی رواداری میدهد؛ سی تا شصت ثانیه معمول است. همین رواداری است که باعث میشود توکنی اینجا چند ثانیه منقضی به نظر برسد و باز هم پذیرفته شود، و توکنی که سرورش ساعت جلو دارد در لحظههای نخست بهعنوان هنوز معتبر نیست رد شود. اگر توکنی خیلی بیرون از این پنجره رد شود، ایراد از ساعت نیست.
نیمه دیگر پاسخ، امضاست. توکن منقضی میتواند امضایی کاملاً درست داشته باشد و توکن جعلی میتواند exp بسیار دوری اعلام کند؛ این دو پرسش مستقلاند. این صفحه هر دو را میگوید: امضا را با کلید زیر توکن بررسی کنید، و نتیجه منقضی همچنان کنار نتیجه معتبر اعلام میشود.
یک توکن چقدر باید عمر کند
کوتاه، چون توکن را نمیشود پس گرفت. همینکه امضا شد، هر کس آن را داشته باشد تا گذشتن exp همان کاربر است؛ پس توکن دسترسیای که پانزده دقیقه عمر میکند زیان یک نشت را جوری محدود میکند که توکن سیروزه هرگز نمیتواند. ترتیب معمول، توکن دسترسی کوتاه است در کنار توکن تازهسازی بلند که سمت سرور نگه داشته میشود و میتوان باطلش کرد — همان معاملهای که مقایسه با کوکی نشست از آن میگوید.
اگر بهجای عیبیابی میخواهید همین رفتار را بیازمایید، تولید JWT توکنی امضا میکند که پنج دقیقه دیگر منقضی میشود، یا توکنی بیهیچ انقضا، تا ببینید کد خودتان چه واکنشی نشان میدهد.