مولّد مفتاح JWT السري — HS256/384/512
ولّد مفتاحاً سرياً قوياً ومطابقاً للمواصفة لـ HS256/384/512 — 100% في متصفحك، لا يُرسل إلى خادم أبداً. base64url أو base64 أو hex؛ انسخه لملف .env.
أوامر سطر الأوامر المكافئة
ما هو مولّد مفتاح JWT السري؟
ينتج مولّد مفتاح JWT السري مفتاح التوقيع العشوائي الذي يستخدمه رمز JSON Web Token الموقّع بـHMAC ليثبت أنه لم يُعبَث به. حين توقّع رمزاً بـHS256 أو HS384 أو HS512، تشغّل الخوارزمية HMAC على ترويسة الرمز وحمولته باستخدام مفتاح سري مشترك واحد؛ ويعيد المُتحقّق حساب HMAC نفسه بالمفتاح نفسه ويقبل الرمز فقط إذا تطابق التوقيعان. يرتكز أمان هذا المخطط كله على كون المفتاح السري طويلاً ولا يُتنبَّأ به — وهو بالضبط ما تنشئه هذه الأداة: سلسلة عشوائية عالية الإنتروبيا، مولَّدة في متصفحك، بحجم صحيح للخوارزمية التي تختارها.
من المفيد الدقّة بشأن ما تفعله الأداة وما لا تفعله. إنها تولّد المفتاح السري — القيمة التي تضعها في متغيّر بيئة JWT_SECRET — لا رمزاً جاهزاً. إن أردت تجميع ترويسة وحمولة وتوقيعهما في JWT فعلي، فتلك مهمة منشئ JWT؛ ولتفكيك رمز موجود والتحقق من توقيعه، استخدم محلّل JWT. فكّر في المفتاح السري كالمفتاح وفي المنشئ كالقفل الذي يشغّله: تولّد المفتاح مرة، وتخزّنه بأمان، وتعيد استخدامه لتوقيع رموز كثيرة والتحقق منها.
كم يجب أن يكون طول المفتاح؟ الجواب تحدّده المواصفة، لا التفضيل. تشترط RFC 7518 §3.2 — معيار JSON Web Algorithms — أن يكون مفتاح HMAC بحجم ناتج التجزئة على الأقل: «يجب استخدام مفتاح بحجم ناتج التجزئة (مثلاً 256 بت لـHS256) أو أكبر». يعطي ذلك جدولاً نظيفاً يتبعه المولّد تلقائياً:
| Algorithm | HMAC | Min bytes | Min bits | hex chars | base64 chars | base64url chars | |-----------|------|-----------|----------|-----------|--------------|-----------------| | HS256 | HMAC-SHA-256 | 32 | 256 | 64 | 44 | 43 | | HS384 | HMAC-SHA-384 | 48 | 384 | 96 | 64 | 64 | | HS512 | HMAC-SHA-512 | 64 | 512 | 128 | 88 | 86 |
تأتي أعداد الأحرف من ترميزات RFC 4648 لأطوال البايتات تلك: يضاعف hex عدد البايتات؛ ويتوسّع base64 بنسبة 4⁄3 مع الحشو؛ ويسقط base64url الحشو، فيصير مفتاح من 32 بايتاً 43 حرف base64url بدل 44. base64url هو ترميز JWT الأصلي — أبجدية آمنة في الروابط، بلا حشو — ولهذا هو الإخراج الافتراضي هنا؛ يمكن لمفتاح سري بـbase64url أن يجلس في ترويسة أو رابط أو قيمة إعداد دون أي هروب.
العشوائية هي الجزء الذي لا يمكنك التهاون فيه. يسحب هذا المولّد بايتاته من crypto.getRandomValues، مولّد الأرقام العشوائية الزائف الآمن تعمويّاً في المتصفح، البدائية نفسها التي تدعم توليد مفاتيح Web Crypto. لا يستخدم Math.random أبداً، فهو سريع لكنه متنبَّأ به وغير صالح إطلاقاً لمفتاح توقيع — مولّد عشوائي متنبَّأ به يعني مفتاحاً سرياً قابلاً للتخمين، ومفتاح سري قابل للتخمين يعني رموزاً قابلة للتزوير. ولأن التحقق من HMAC يحدث محلياً بالمفتاح السري المشترك، يستطيع مهاجم يلتقط رمزاً أن يكسر مفتاحاً ضعيفاً بالقوة الغاشمة دون اتصال وبلا حدّ معدّل؛ وأدوات مثل hashcat (الوضع 16500) وjwt_tool موجودة لهذا الغرض بالضبط. أما مفتاح عشوائي من 32 بايتاً بإنتروبيا كاملة فهو خارج المتناول حسابياً. والعبرة صريحة: لا تستخدم أبداً كلمة مرور أو كلمة قاموسية أو سلسلة مكتوبة يدوياً كمفتاح JWT سري — ولّد واحداً عشوائياً.
أخيراً، توليد المفتاح على جانب العميل هو بذاته خاصية أمان. يجب ألا يُرسَل مفتاح توقيع إلى طرف ثالث أبداً، ولا حتى الموقع الذي يساعدك على إنشائه. كل بايت هنا يُنتَج ويُرمَّز في متصفحك؛ لا شيء يُرفع أو يُسجَّل أو يُخزَّن. وحين تكون مستعداً لشحن المفتاح، يسلّمك زر «نسخ لـ.env» سطر JWT_SECRET=…، وإن احتجت طيّه في إعداد أكبر فقد يساعد محوّل JSON إلى .env. ولّد، انسخ، خزّنه في مدير أسرار — ودوّره بترويسة kid ونوافذ صلاحية متداخلة حين يحين الوقت.
// The secret you generate here goes straight into your signing code.
// Node.js with jsonwebtoken — the JWT_SECRET env var holds the key.
import jwt from 'jsonwebtoken';
const secret = process.env.JWT_SECRET; // e.g. base64url value from this tool
// Sign a token with HS256 (HMAC-SHA-256).
const token = jwt.sign({ sub: 'user-42', role: 'member' }, secret, {
algorithm: 'HS256',
expiresIn: '15m'
});
// Verify it — pin the algorithm to a whitelist; never trust the token's alg.
const payload = jwt.verify(token, secret, { algorithms: ['HS256'] });
// ---------------------------------------------------------------
// Python with PyJWT — same secret, same algorithm pinning.
// import jwt
// token = jwt.encode({"sub": "user-42"}, key, algorithm="HS256")
// payload = jwt.decode(token, key, algorithms=["HS256"]) # whitelist!
// ---------------------------------------------------------------
// Equivalent-strength CLI generation (32 bytes for HS256):
// openssl rand -base64 32
// node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
// python -c "import secrets; print(secrets.token_urlsafe(32))" الميزات الرئيسية
طول مفتاح واعٍ بالخوارزمية
انتقِ HS256 أو HS384 أو HS512 ويضبط المولّد حجم المفتاح الأدنى وفق RFC 7518 §3.2 تلقائياً — 32 أو 48 أو 64 بايتاً. يمكنك طلب مفتاح أطول، لكن لا يمكنك أبداً أن توفّر بالخطأ مفتاحاً أقصر من اللازم يخالف المواصفة أو ترفض مكتبة صارمة التوقيع به.
ثلاث صيغ إخراج آمنة نصياً
احصل على البايتات العشوائية نفسها بصيغة base64url (ترميز JWT الأصلي الآمن في الروابط دون حشو — الافتراضي)، أو base64 القياسي، أو hex، معروضةً جنباً إلى جنب. base64url هو الافتراضي الأكثر أماناً لـJWT_SECRET؛ بدّل الصيغ حين يتوقع مُحمِّل أو مكتبة محدّدة غيرها. الإنتروبيا متطابقة في الثلاث.
عشوائية آمنة تعمويّاً
يُسحَب كل مفتاح سري من crypto.getRandomValues، مولّد المتصفح العشوائي الآمن تعمويّاً والبدائية وراء توليد مفاتيح Web Crypto. لا Math.random أبداً. يضمن ذلك مفتاحاً بإنتروبيا كاملة بلا بنية متنبَّأ بها — وهي الخاصية التي تضع المفتاح خارج متناول القوة الغاشمة دون اتصال.
نسخ لـ.env بنقرة واحدة
يلفّ «نسخ لـ.env» القيمة في الإسناد المعتاد JWT_SECRET=…، سطر واحد بلا علامات اقتباس — جاهز للّصق في ملف .env أو سرّ Docker أو متغيّر CI دون كتابة اسم المفتاح يدوياً. «نسخ» العادي يأخذ المفتاح الخام حين تحتاج القيمة وحدها.
أوامر سطر أوامر مكافئة
تطبع لوحة أوامر openssl rand وNode crypto.randomBytes وPython secrets المطابقة بسطر واحد للخوارزمية المختارة، لتعيد إنتاج مفتاح متساوي القوة في سكربت توفير أو Dockerfile. تغفل معظم الأدوات المنافسة هذا؛ وهنا هو مدمج.
تقنيع الإظهار / الإخفاء
يُقنَّع المفتاح السري افتراضياً ليبقى خارج الشاشة أثناء عرض توضيحي أو درس أو مشاركة شاشة. اكشفه بأيقونة العين فقط حين تكون مستعداً للنسخ. تضع إجراءات النسخ دائماً المفتاح السري الحقيقي في الحافظة، سواء كان ظاهراً أو مخفياً.
خاص 100%، في المتصفح فقط
يُولَّد المفتاح السري ويُرمَّز ويُعرَض بالكامل على جهازك. لا طلبات شبكة، ولا تسجيل، ولا تخزين — تأكّد في أدوات المطوّر ← الشبكة. يجب ألا يصل مفتاح توقيع إلى طرف ثالث أبداً، وهنا لا يصل أبداً، وهذا هو السبب الكامل لتوليده على جانب العميل.
متوفر بـ15 لغة
الواجهة الكاملة — التسميات والتعليمات والإرشاد — مُترجَمة إلى 15 لغة، لتكون الأداة قابلة للاستخدام وتكون نصيحة الأمان واضحة أينما عمل فريقك.
أمثلة محلولة
توليد مفتاح HS256 سري بصيغة base64url (الافتراضي)
Algorithm: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
يوقّع HS256 بـHMAC-SHA-256، لذا تشترط RFC 7518 §3.2 مفتاحاً لا يقل عن 32 بايتاً (256 بت). يسحب المولّد 32 بايتاً عشوائياً آمناً تعمويّاً من crypto.getRandomValues ويرمّزها بـbase64url — الأبجدية الآمنة في الروابط دون حشو، وهي ما يستخدمه JWT نفسه. تتحوّل 32 بايتاً إلى سلسلة base64url من 43 حرفاً. أسقط القيمة مباشرةً في JWT_SECRET. كل نقرة تولّد مفتاحاً سرياً جديداً؛ لا يتكرر شيء مرتين أبداً.
توليد مفتاح HS512 سري (64 بايتاً / 512 بت)
Algorithm: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)
يستخدم HS512 خوارزمية HMAC-SHA-512، وناتج تجزئتها 64 بايتاً، لذا تفرض RFC 7518 §3.2 مفتاحاً لا يقل عن 64 بايتاً (512 بت). تستشعر الأداة الخوارزمية وترفع عدد البايتات تلقائياً — فلن تضطر أبداً إلى تذكّر الحد الأدنى. ترمَّز 64 بايتاً عشوائياً إلى سلسلة base64url من 86 حرفاً، أو 88 حرفاً في base64 القياسي، أو 128 حرفاً hex. اختيار خوارزمية أطول هنا هو الطريق الأسرع بنقرة واحدة لتوفير مفتاح سري بإنتروبيا أعلى.
انسخ المفتاح السري كسطر .env
Click "Copy for .env"
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
يلفّ «نسخ لـ.env» القيمة المولَّدة في الإسناد المعتاد JWT_SECRET=… لتلصقها مباشرةً في ملف .env أو سرّ Docker أو متغيّر CI دون كتابة اسم المفتاح يدوياً. تبقى القيمة في سطر واحد بلا علامات اقتباس محيطة — تماماً كما تتوقعها المُحمِّلات بنمط dotenv. تحتاج المتغيّر مضمَّناً في إعداد أوسع؟ اقرنه بـمحوّل JSON إلى .env المرتبط أدناه.
أعد إنتاج المفتاح السري من سطر أوامر (بقوة مكافئة)
Show the CLI command
openssl rand -base64 32
تطبع لوحة سطر الأوامر أوامر openssl وNode وPython التي تسحب العدد نفسه من البايتات العشوائية الآمنة للخوارزمية المختارة — openssl rand -base64 32 لـHS256، و…48 لـHS384، و…64 لـHS512. الناتج مفتاح سري متساوي القوة، لا سلسلة مطابقة بايتياً: يُصدر openssl صيغة base64 قياسية بحشو بينما تتبنّى هذه الأداة base64url افتراضياً، فتختلف الأبجديات والأحرف الأخيرة. استخدم ما يناسب سكربت التوفير لديك؛ الإنتروبيا واحدة.
إظهار المفتاح السري وإخفاؤه
Toggle the eye icon
••••••••••••••••••••••••••••••••••••••••••• ↔ 3sJ9aFq2kP7m…
يُقنَّع المفتاح السري افتراضياً كي لا يُلتقَط بالنظر من فوق الكتف أو بتسجيل الشاشة أثناء عرض توضيحي أو مشاركة شاشة. انقر أيقونة العين لكشفه حين تكون مستعداً للنسخ، ثم أخفِه بعدها. يعمل «نسخ» و«نسخ لـ.env» سواء كانت القيمة ظاهرة أو مقنَّعة — فالمفتاح السري الحقيقي هو دائماً ما يصل إلى حافظتك، لا النقاط.
كيفية استخدام مولّد مفتاح JWT السري
- 1
اختر خوارزمية التوقيع
انتقِ HS256 أو HS384 أو HS512. يطبّق المولّد فوراً الحد الأدنى لطول المفتاح وفق RFC 7518 §3.2 لتلك الصيغة من HMAC — 32 أو 48 أو 64 بايتاً — فلا تضطر أبداً إلى البحث عن الرقم أو المخاطرة بمفتاح أقصر من اللازم.
- 2
اختر صيغة الإخراج
base64url هو الافتراضي — ترميز JWT الأصلي الآمن في الروابط دون حشو. بدّل إلى base64 القياسي إن توقّعه مُحمِّل، أو hex حين يقبل نظام أحرف 0–f فقط. الثلاثة تُرمّز البايتات العشوائية نفسها بإنتروبيا متطابقة.
- 3
اكشف المفتاح السري وانسخه
يُقنَّع المفتاح السري افتراضياً لإبقائه خارج الشاشة أثناء عرض توضيحي أو مشاركة شاشة. انقر أيقونة العين لكشفه، ثم «نسخ» لأخذ القيمة الخام أو «نسخ لـ.env» لنسخ سطر JWT_SECRET=… جاهز لملف .env أو متغيّر CI.
- 4
أعد التوليد عند الحاجة
انقر «إعادة التوليد» لمفتاح سري جديد مستقل مسحوب من crypto.getRandomValues. ولّد مفتاحاً لكل بيئة — لا تعد استخدام مفتاح التوقيع نفسه عبر التطوير والتجهيز والإنتاج أبداً.
- 5
استخدم مكافئ سطر الأوامر أو انتقل إلى التوقيع
تُظهر لوحة سطر الأوامر أوامر openssl وNode وPython المطابقة بسطر واحد للتوفير المؤتمت. وبمفتاحك بيدك، وقّع رمزاً بـمنشئ JWT وأكّد التوقيع بـمحلّل JWT.
أخطاء شائعة في مفتاح JWT السري
استخدام كلمة مرور أو عبارة قصيرة كمفتاح سري
سلسلة يختارها بشر تحمل إنتروبيا أقل بكثير من اللازم لمفتاح توقيع ويمكن استعادتها دون اتصال بهجوم قاموسي أو قوة غاشمة، وبعدها يمكن تزوير أي رمز. ولّد مفتاحاً سرياً عشوائياً بإنتروبيا كاملة بدلاً من ذلك.
JWT_SECRET=mySuperSecret123 → low entropy, brute-forceable
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0 → 32 random bytes
مفتاح أقصر مما تشترطه الخوارزمية
تفرض RFC 7518 §3.2 مفتاح HMAC بطول ناتج التجزئة على الأقل. مفتاح من 16 بايتاً لـHS256 دون عتبة الـ32 بايتاً — يُضعِف التوقيع وترفضه بعض المكتبات صراحةً.
16-byte key with HS256 → below the 32-byte minimum
32-byte key with HS256 → meets RFC 7518 §3.2
توليد المفتاح بـMath.random
Math.random ليس آمناً تعمويّاً — مخرجه متنبَّأ به، فمفتاح سري مبني عليه قابل للتخمين والرموز التي يوقّعها قابلة للتزوير. يجب أن يأتي مفتاح التوقيع من مولّد عشوائي آمن تعمويّاً مثل crypto.getRandomValues.
Math.random()-based key → predictable, unsafe
crypto.getRandomValues key → full entropy
إعادة ترميز المفتاح السري قبل التوقيع
خزّن السلسلة التي أنتجتها الأداة بالضبط وأعدها كما هي. فكّ ترميز base64 لها إلى بايتات في خدمة مع معاملتها كسلسلة حرفية في أخرى يعطي الجانبين مفتاحين مختلفين، وكل فحص توقيع يفشل.
Service A: raw string · Service B: base64-decoded → signatures never match
Both services use the identical stored string → signatures verify
إعادة استخدام المفتاح السري نفسه عبر كل البيئات
JWT_SECRET واحد يتشاركه التطوير والتجهيز والإنتاج يعني أن تسريباً في أي مكان يزوّر الرموز في كل مكان ويصبح التدوير الكل أو لا شيء. وفّر مفتاحاً سرياً متمايزاً لكل بيئة.
Same JWT_SECRET in dev, staging, prod → one leak breaks all
A unique secret per environment → blast radius contained
الوثوق بحقل alg في الرمز عند التحقق
السماح للمُتحقّق بقبول أي خوارزمية يعلنها الرمز يتيح تزوير alg:none وخلط HS/RS. مرّر قائمة بيضاء صريحة بالخوارزميات مهما كان المفتاح السري قوياً.
jwt.verify(token, secret) → accepts the token's alg
jwt.verify(token, secret, { algorithms: ['HS256'] }) → pinned من يستخدم هذه الأداة
- توفير JWT_SECRET لخدمة جديدة
- تطلق واجهة برمجية تُصدر رموزاً موقّعة بـHMAC؟ انتقِ الخوارزمية التي تستخدمها مكتبتك، وانسخ المفتاح السري كسطر JWT_SECRET=…، وأسقطه في بيئة الخدمة. ولّد مفتاحاً متمايزاً للتطوير والتجهيز والإنتاج — لا تشارك مفتاحاً سرياً واحداً عبر البيئات أبداً.
- تدوير مفتاح سري مسرّب أو متقادم
- حين يُشتبَه بتسريب مفتاح أو يحين موعد تدويره ببساطة، ولّد مفتاحاً سرياً جديداً هنا، وأسنِد له kid جديداً، وانشره بنافذة تداخل كي تواصل الرموز الحيّة التحقق حتى تنتهي صلاحيتها. وفي تسريب مؤكَّد، دوّر فوراً وأسقط المفتاح القديم من المجموعة المقبولة.
- استبدال مفتاح ضعيف أو مكتوب يدوياً
- ورثت قاعدة شيفرة JWT_SECRET فيها عبارة قصيرة أو قيمة مثال منسوخة؟ ذلك المفتاح قابل للكسر بالقوة الغاشمة دون اتصال. ولّد بديلاً بإنتروبيا كاملة من 32 بايتاً، وبدّله خلف نافذة تدوير، وأغلق ثغرة تزوير الرموز قبل أن تُستغَل.
- أتمتة توليد المفاتيح في خط أنابيب
- تحتاج إنشاء المفتاح في CI أو Dockerfile بدل يدوياً؟ استخدم أمر openssl أو Node أو Python بسطر واحد من لوحة سطر الأوامر لسكّ مفتاح متساوي القوة داخل سكربت التوفير، واستخدم هذه الصفحة لفهم أطوال البايتات والترميزات التي ينتجها كل أمر.
- تعليم توقيع JWT بأمان
- اشرح لفريق كيف يعمل HS256 دون كشف مفتاح إنتاج حقيقي أبداً — ولّد مفتاحاً سرياً يُتخلَّص منه على الشاشة (مقنَّعاً حتى تكشفه)، ووقّع رمزاً نموذجياً بـمنشئ JWT، وتحقّق منه بـمحلّل JWT كي تكون دورة التوقيع والتحقق كلها مرئية.
- قارن أحجام مفاتيح HS256 وHS384 وHS512
- تقرّر أي صيغة من HMAC تعتمدها؟ تنقّل بين الخوارزميات لترى كيف ينمو طول المفتاح المطلوب والسلسلة المرمَّزة — 43 و64 و86 حرف base64url — واختر مقايضة القوة مقابل حجم الرمز التي تناسب نظامك قبل أن تثبّتها في الإعداد.
- توليد مفاتيح للتطوير المحلي
- تحتاج مفتاحاً سرياً سريعاً وصالحاً لتشغيل تدفّق مصادقة محلي؟ ولّد واحداً بنقرة، وانسخه لـ.env، وقد انفكّ حظرك — بمفتاح من مولّد عشوائي آمن تعمويّاً حقيقي بدل قيمة نائبة ستنسى استبدالها قبل النشر.
كيف يعمل المولّد
- crypto.getRandomValues (مولّد عشوائي آمن تعمويّاً)
- تُولَّد الأسرار بملء Uint8Array بـcrypto.getRandomValues، مولّد Web Crypto العشوائي الزائف الآمن تعمويّاً. هو مصدر الإنتروبيا نفسه الذي يدعم توليد مفاتيح Web Crypto. لا يُستخدم Math.random أبداً في أي مكان — فهو متنبَّأ به إحصائياً وغير صالح لأي مفتاح تعموي.
- تحجيم المفتاح وفق RFC 7518 §3.2
- يتبع عدد البايتات لكل خوارزمية اشتراط JSON Web Algorithms بأن يكون مفتاح HMAC بحجم ناتج التجزئة على الأقل: 32 بايتاً لـHS256 (SHA-256)، و48 لـHS384 (SHA-384)، و64 لـHS512 (SHA-512). يضبط اختيار الخوارزمية الحد الأدنى؛ ولن يُصدر المولّد مفتاحاً دون عتبة المواصفة.
- ترميزات RFC 4648 (base64url / base64 / hex)
- تُرمَّز البايتات الخام بأبجديات RFC 4648. يستخدم base64url الأبجدية الآمنة في الروابط دون حشو (32 بايتاً ← 43 حرفاً)، ويستخدم base64 القياسي حشو + و/ و= (← 44 حرفاً)، ويكتب hex حرفين لكل بايت (← 64 حرفاً). تبديل الصيغ يعيد ترميز البايتات نفسها — الإنتروبيا الكامنة لا تتغير.
- لماذا base64url هو الافتراضي
- مكوّنات JWT نفسها مرمَّزة بـbase64url، والأبجدية الآمنة في الروابط دون حشو تعني أن مفتاحاً سرياً بـbase64url لا يحتاج أبداً إلى هروب في ترويسة أو رابط أو ملف إعداد. قد ينكسر + و/ وحشو = الأخير في base64 القياسي في تلك السياقات، لذا base64url هو الافتراضي المتحفّظ لـJWT_SECRET.
- تنسيق «نسخ لـ.env»
- يُصدر «نسخ لـ.env» JWT_SECRET=<value> في سطر واحد بلا علامات اقتباس محيطة — الشكل الذي تحلّله المُحمِّلات بنمط dotenv دون تعديل. لا يحوي المفتاح السري الخام أبداً أحرفاً تستلزم اقتباساً في ملف .env، فالسطر آمن للّصق كما هو.
- أوامر سطر أوامر متساوية القوة، لا مطابقة بايتياً
- أوامر openssl rand -base64 N وNode randomBytes(N).toString('base64url') وPython secrets.token_urlsafe(N) في لوحة سطر الأوامر تسحب جميعها N بايتاً عشوائياً آمناً للخوارزمية المختارة. تنتج مفاتيح متساوية القوة، لا السلسلة نفسها — يُصدر openssl base64 قياسياً بحشو، فتختلف الأبجدية والأحرف الأخيرة عن افتراضي هذه الأداة base64url.
أفضل ممارسات مفتاح JWT السري
- طابِق طول المفتاح مع الخوارزمية
- استخدم 32 بايتاً على الأقل لـHS256، و48 لـHS384، و64 لـHS512، كما تشترط RFC 7518 §3.2. يفعل هذا المولّد ذلك عنك، لكن إن حجّمت مفتاحاً يدوياً فلا تنزل أبداً دون طول ناتج التجزئة — مفتاح HMAC أقصر من اللازم يُضعِف التوقيع وقد ترفضه المكتبات الصارمة.
- ولّد دائماً بمولّد عشوائي آمن تعمويّاً، لا بكلمة مرور
- مفتاح JWT السري اعتماد آلة لا يحتاج أحد إلى حفظه، فأنفِق الإنتروبيا الكاملة: استخدم مفتاحاً عشوائياً آمناً تعمويّاً، لا عبارة مرور أو كلمة قاموسية أو سلسلة مكتوبة يدوياً. الأسرار التي يختارها البشر هي الهدف الأسهل لهجمات القوة الغاشمة دون اتصال التي تؤتمتها أدوات كسر JWT.
- استخدم مفتاحاً سرياً فريداً لكل بيئة
- يجب أن يكون للتطوير والتجهيز والإنتاج كلٍّ منها JWT_SECRET خاص به. مشاركة مفتاح واحد تعني أن تسريباً في بيئة منخفضة المخاطر يزوّر الرموز في كل مكان، وتجعل التدوير الكل أو لا شيء. ولّد مفتاحاً سرياً منفصلاً هنا لكل بيئة وخزّن كلاً منه في نطاق مدير أسرار خاص به.
- ثبّت الخوارزمية عند التحقق
- على جانب التحقق، مرّر دائماً قائمة بيضاء صريحة بالخوارزميات — algorithms: ['HS256'] في jsonwebtoken، وalgorithms=["HS256"] في PyJWT — ولا تثق أبداً بحقل alg داخل الرمز. قبول الخوارزمية التي يعلنها الرمز عن نفسه يتيح هجمات خلط الخوارزمية الكلاسيكية وalg:none للتزوير، مهما كان مفتاحك قوياً.
- دوّر بترويسة kid ومفاتيح متداخلة
- وسِم الرموز الموقّعة بمُعرّف مفتاح (kid) وانشر المفاتيح النشطة عبر نقطة نهاية JWKS كي تدوّر دون توقّف: وقّع الرموز الجديدة بالمفتاح الجديد مع استمرار قبول القديم حتى تنتهي صلاحية رموزه. وعند الاشتباه بتسريب، تخطَّ التداخل وألغِ المفتاح القديم فوراً.
الأسئلة الشائعة
هل يُرسَل مفتاح JWT السري المولَّد إلى خادمكم؟
كيف أولّد مفتاح JWT سرياً آمناً؟
كم يجب أن يكون طول مفتاح JWT السري لـHS256؟
ما الفرق بين base64url وbase64 وhex، وأيها أختار؟
هل يمكن كسر مفتاح JWT سري ضعيف؟
هل يمكنني استخدام كلمة مرور كمفتاح JWT سري؟
كيف أدوّر مفتاح JWT سرياً دون كسر الرموز الحيّة؟
كيف يختلف مفتاح HMAC (HS*) عن مفتاح RSA أو ECDSA (RS*/ES*)؟
أدوات ذات صلة
عرض جميع الأدوات →مولّد تجزئة bcrypt والتحقق منها
أدوات الأمن
ولّد تجزئات كلمات المرور بـ bcrypt وتحقق منها أونلاين — تكلفة قابلة للضبط، بادئات $2b$/$2a$/$2y$. 100% في متصفحك؛ كلمة مرورك لا تُرفع أبداً.
محلّل JWT — فك ترميز الرموز
أدوات الأمن
فك ترميز رموز JWT أونلاين مع محلّل JWT المجاني. افحص الترويسة والحمولة والتوقيع وانتهاء الصلاحية والخوارزمية والمطالبات فوراً. 100% في المتصفح — رمزك لا يغادر جهازك. بلا تسجيل، بلا تتبّع.
مُنشئ وترميز JWT
أدوات الأمن
مولّد ومرمّز JWT مجاني أونلاين. ابنِ الترويسة والحمولة، ووقّع بـ HS256 أو RS256 أو ES256 فوراً. 100% في المتصفح — سرّك ومفتاحك لا يغادران جهازك.
مولّد تجزئة MD5 — فوري ومجاني أونلاين
أدوات الأمن
أنشئ تجزئة MD5 وSHA-256 وSHA-1 وSHA-512 فوراً — أداة مجانية تعمل في متصفّحك بدون تتبّع أو رفع بيانات. الصق النص واحصل على التجزئة في ثانية. جرّبها الآن.
مولّد كلمات مرور عشوائية — قوي وآمن ومجاني
أدوات الأمن
ولّد كلمات مرور عشوائية قوية فوراً — أداة مجانية أونلاين تعمل في متصفّحك فقط. خصّص الطول والأحرف، دُفعات حتى 50 مع تحليل الإنتروبيا. بياناتك لا تغادر جهازك.
مولّد تجزئة SHA-1 (160 بت — إرث)
أدوات الأمن
أنشئ تجزئات SHA-1 في متصفحك — مخرجات سداسية من 40 حرفاً، بدون رفع. أداة إرثية لمعرّفات Git وفحص الشهادات القديمة وعمليات التدقيق. بياناتك لا تغادر جهازك.