نحوه استفاده
- HS256، HS384 یا HS512 را انتخاب کنید.
- کلیمهای payload را ویرایش کنید و روی «تنظیم iat و exp» کلیک کنید تا زمان فعلی و یک زمان انقضا اضافه شود.
- یک کلید مخفی آزمایشی وارد کنید یا یک کلید ۲۵۶ بیتی تصادفی تولید کنید.
- توکن امضاشده را کپی کنید. برای بررسی یک توکن، به «تأیید امضا» بروید، آن را جایگذاری کنید و کلید مخفی را وارد کنید.
نحوه کار
یک JSON Web Token (RFC 7519) سه بخش کدگذاریشده با Base64URL دارد: سرآیند، payload شامل claimها و امضا. با الگوریتمهای HMAC یعنی HS256، HS384 و HS512، امضا یک HMAC با SHA-256، SHA-384 یا SHA-512 روی “header.payload” است که با یک کلید مشترک محاسبه میشود. هر کسی که کلید را داشته باشد میتواند توکن بسازد و آن را تأیید کند.
این ابزار سرآیند و payload را بهصورت JSON فشرده سریالسازی میکند، آنها را کدگذاری میکند و با crypto.subtle، یعنی Web Crypto API داخلی مرورگر، امضا میزند. فیلد alg در سرآیند همیشه با الگوریتم انتخابشده مطابقت دارد، مقدار پیشفرض typ برابر JWT است و سایر فیلدهای سرآیند مانند kid حفظ میشوند. گزینه «تنظیم iat و exp» زمان فعلی را بهعنوان iat (زمان صدور) مینویسد و طول عمر انتخابی را بهعنوان exp اضافه میکند؛ هر دو بر حسب ثانیه از ۱ ژانویه ۱۹۷۰ UTC. نتیجه با سایر کتابخانههای JWT سازگار است؛ برای مثال، توکن نمونه معروف jwt.io دقیقاً بازتولید میشود.
کلید میتواند متن ساده باشد (بایتهای UTF-8 آن بهعنوان کلید استفاده میشود) یا بایتهای کدگذاریشده بهصورت Base64/Base64URL که بسیاری از فریمورکها استفاده میکنند. دکمه کلید تصادفی، ۳۲ بایت تصادفی با crypto.getRandomValues میسازد. برای HS256 حداقل ۳۲ بایت تصادفی استفاده کنید؛ کلیدهای کوتاه انتخابشده توسط انسان را میتوان از روی هر توکن بهصورت آفلاین حدس زد.
بخش تأیید، توکن را رمزگشایی میکند، بررسی میکند که از الگوریتم HMAC استفاده شده باشد و امضا را دوباره با crypto.subtle.verify محاسبه میکند. همچنین نشان میدهد چه زمانی exp یا nbf به این معناست که توکن منقضی شده یا هنوز معتبر نیست. الگوریتمهای کلید عمومی مانند RS256 و ES256 پشتیبانی نمیشوند و تأیید در اینجا issuer، audience یا سایر claimهایی را که برنامه شما ممکن است نیاز داشته باشد بررسی نمیکند.
نمونهها
تست یک API بهصورت محلی
سرور توسعه شما توکنهای HS256 امضاشده با “dev-secret-change-me” را میپذیرد. مقدار sub را روی یک شناسه کاربر آزمایشی تنظیم کنید، روی «تنظیم iat و exp» با ۱ ساعت کلیک کنید، کلید را وارد کنید و توکن را در سرآیند Authorization: Bearer ارسال کنید.
بررسی اینکه کدام کلید مخفی توکن را امضا کرده است
یک توکن استیجینگ رد شده است. آن را در «تأیید امضا» جایگذاری کنید و کلید مخفی استیجینگ را امتحان کنید: «امضا معتبر نیست» به شما میگوید که توکن با کلید مخفی دیگری امضا شده یا کلید مخفی در قالب متفاوتی است (متن در مقابل Base64).
بازتولید نمونه jwt.io
با هدر {"alg":"HS256","typ":"JWT"}، payload {"sub":"1234567890","name":"John Doe","iat":1516239022} و کلید مخفی “your-256-bit-secret”، توکن به SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c ختم میشود، همانند jwt.io.
پرسشهای متداول
آیا کلید مخفی من به سرور شما ارسال میشود؟
خیر. امضا و تأیید با Web Crypto API درون مرورگر شما اجرا میشوند و کلید مخفی در هیچجا ذخیره یا ارسال نمیشود. با این حال توصیه میکنیم فقط از کلیدهای مخفی آزمایشی استفاده کنید، زیرا کلید مخفی امضای واقعی هرگز نباید در یک وبسایت تایپ شود.
چرا با وجود درست بودن کلید مخفی، امضا نامعتبر است؟
قالب کلید مخفی را بررسی کنید. برخی سیستمها از متن کلید مخفی استفاده میکنند، برخی دیگر ابتدا آن را از Base64 رمزگشایی میکنند که بایتهای کلید متفاوتی به دست میدهد. همچنین بررسی کنید که توکن تغییر نکرده و از همان الگوریتم استفاده میکند.
آیا میتوانم توکنهای RS256 یا ES256 بسازم؟
با این ابزار نه. این ابزار فقط از الگوریتمهای HMAC با کلید مشترک HS256، HS384 و HS512 پشتیبانی میکند.
آیا payload رمزنگاری شده است؟
خیر. یک JWT امضاشده فقط کدگذاری شده است؛ هر کسی میتواند payload را رمزگشایی و مطالعه کند. امضا فقط ثابت میکند که توکن تغییر نکرده است. رمز عبور یا سایر اطلاعات محرمانه را در payload قرار ندهید.
حریم خصوصی
توکنها فقط در مرورگر شما و با Web Crypto API ساخته و تأیید میشوند. هدر، payload، توکن و کلید مخفی بارگذاری، ذخیره یا در تجزیهوتحلیلها وارد نمیشوند.