JWT
رمز موقّع، وفخاخه التشفيرية، وعيبه الذي لا مفر منه.
المصادقة باستخدام JWT
يُقدَّم JWT في كل مكان على أنه الحل الحديث للمصادقة، ولهذه السمعة أساس حقيقي: فالرمز الموقّع يتيح لأي خدمة التحقق من الهوية دون الرجوع إلى قاعدة بيانات ودون مشاركة جلسة. وفي البنى الموزعة على عدة خدمات، يمثل ذلك مكسبًا كبيرًا.
وهذه الخاصية نفسها هي عيبه الرئيسي، وهي النقطة التي يسكت عنها معظم الدروس التعليمية تقريبًا: لا يمكن إبطال JWT. فهو صالح لأن توقيعه صالح، ويبقى هذا التوقيع صالحًا حتى انتهاء الصلاحية المدوَّن في الرمز. فإذا تسرّب رمز، أو فصلتَ موظفًا، أو غيّر مستخدم كلمة مروره بعد تعرضه للاختراق، يظل الرمز يعمل. أما جلسة الخادم فيمكن حذفها.
توجد وسائل للتخفيف — انتهاء صلاحية قصير، ورمز تحديث، وقائمة حظر — لكن كلًّا منها يعيد جزءًا من الحالة (state) التي كان JWT يدّعي التخلص منها. فاختيار JWT يعني قبول هذه المقايضة عن علم، لا تجنّب التفكير.
لذلك يغطي هذا الدرس الرمز نفسه: بنيته، وتوقيعه، والهجومين الكلاسيكيين ضد التطبيقات الساذجة، وتكامله مع Spring Security، والمعالجة الصريحة لمسألتي التخزين على جهة العميل والإبطال. تستخدم الشيفرة Spring Boot 3 وSpring Security 6 وJava 17.
ما هو JWT وما ليس عليه
يتكون JWT من ثلاثة أجزاء مرمَّزة بصيغة base64url ومفصولة بنقاط:
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش