أدوات المطور · وحدة فك التشفير JWT
Base64 vs Base64url: لماذا يفشل JWT في وحدة فك ترميز Base64 القياسية
· كيف يعمل
jwt base64 ترميز
قم بلصق مقطع JWT في وحدة فك ترميز base64 عادية وقد يشكو من الأحرف أو الحشو. يشرح هذا المنشور تفويضات متغير base64url JWS وكيفية التحويل بين الاثنين.
حرف غير صالح، وحشوة غير صحيحة - الأخطاء التي تظهر عندما يلتقي base64 مع base64url
غالبًا ما تعني رسالة "حرف غير صالح" أو "حشوة غير صحيحة" أن مقطع JWT قد تم منحه إلى وحدة فك ترميز تتوقع Base64 عادي. قد يتم نسخ الرمز المميز بشكل صحيح. يتبع تمثيلها اصطلاحات base64url، بينما تقبل الأداة المساعدة المتلقية أبجدية ذات صلة ولكن ليست متطابقة أو تصر على الحشو الواضح.
ToolAcre يتجنب عدم التطابق بين الرأس والحمولة. تقوم وحدة فك ترميز البايت الخاصة بها بإزالة المسافات البيضاء، وترجمة URL-الرموز الآمنة، واستعادة الحشو المحذوف عندما يسمح الطول بذلك، ثم تحويل البايتات إلى UTF-8 الصارمة. يصبح الفشل في أي مرحلة خطأ INVALID_JWT وليس استثناءً أوليًا للمتصفح.
أبجديتان - علامة الجمع والشرطة المائلة مقابل الواصلة والشرطة السفلية، ولماذا فرضت عناوين URL التغيير
يستخدم Base64 القياسي علامة الجمع والشرطة المائلة في الموضعين الأبجديين الأخيرين. يقوم Base64url بتعيين الواصلة والشرطة السفلية لتلك المواضع نفسها. لا تتغير القيم الأساسية المكونة من ستة بتات، لذا فإن ترجمة `-` إلى `+` و`_` إلى `/` تحافظ على كل بايت تم فك تشفيره؛ فقط التغييرات الإملائية الآمنة للنقل.
هذه البدائل مهمة في القنوات التي تحتوي فيها علامة الجمع أو الشرطة المائلة بالفعل على بناء الجملة. يؤدي التهجئة الآمنة URL إلى تقليل التفسير العرضي من خلال معالجة النموذج أو المسار. لا يضيف السرية أو النزاهة أو الأصالة. يمكن لأي شخص يتلقى مقطعًا عكس عمليات الاستبدال واستعادة نفس البايتات بدون مفتاح تشفير.
الحشو - لماذا يقوم JWS بإزالة علامات التساوي وكيفية استعادتها لوحدة فك ترميز صارمة
ToolAcre يقبل الحشو المحذوف. بعد التطبيع الأبجدي، فإنه يفحص طول القطعة modulo four. باقي اثنين يحتاج إلى علامتي يساوي، وباقي ثلاثة يحتاج إلى واحدة. ما تبقى من واحد مستحيل بالنسبة لقيمة Base64 كاملة ويتم رفضه كسلسلة مبتورة بدلاً من تخمينه في الشكل.
إن استرداد الحشو هو إطار ميكانيكي، وليس إصلاحًا رمزيًا. لا تؤدي إضافة علامات المساواة إلى استعادة الأحرف المفقودة أثناء النسخ، ولا يُظهر فك تشفير البايت الناجح أن البايتات جاءت من جهة الإصدار. يقوم التنفيذ فقط بإعادة بناء الطول المتعارف عليه الذي يتطلبه برنامج فك ترميز المتصفح قبل الاتصال بـ `atob`.
فك تشفير الرمز المميز بالكامل مرة واحدة - خطأ عدم التقسيم على النقاط أولاً
يجب تقسيم الرمز المميز الموقع على نقاطه قبل فك تشفير أي مقطع. يؤدي تمرير `header.payload.signature` إلى دالة Base64 إلى تقديم نقاط تنتمي إلى التسلسل JWT، وليس أبجدية Base64. يتطلب ToolAcre ثلاثة مقاطع بالضبط لهذا الإدخال على شكل JWS ويبلغ عن العدد المرصود عند غياب تلك البنية.
تتلقى الحالة المكونة من خمسة أجزاء رسالة منفصلة JWE لأن التسلسل المضغوط المشفر ليس نفس الكائن. بدلاً من ذلك، يشير جزءان أو أربعة أجزاء إلى الاقتطاع أو الإدخال الخاطئ. يأتي هذا الفحص الهيكلي قبل تفسير JSON، مع الاحتفاظ بخطأ النسخ مختلفًا عن النص المشفر التالف أو JSON المشوه.
مثال عملي - تحويل مقطع واحد من base64url إلى base64، وتعبئته وفك تشفيره إلى JSON
للحصول على تحويل ناجح، خذ `eyJhbGciOiJIUzI1NiJ9`. لا يحتوي على أحرف أبجدية تختلف بين المتغيرات، لكن الحشو المفقود لا يزال يوضح المسار. طوله يسمح باستعادة الحشو. ينتج عن فك التشفير UTF-8 بايت لـ `{"alg":"HS256"}`، وينتج عن التحليل JSON كائنًا بخاصية `alg` واحدة.
المقطع الذي يحتوي على واصلة أو شرطة سفلية يتبع نفس التسلسل مع استبدال الرمزين أولاً. يقوم ToolAcre بتنفيذ هذه العمليات داخل `base64ToBytes`، ثم يقوم `decodeSegment` بتحليل النص الناتج. الخوارزمية المعروضة هي ما يعلنه الرأس الذي لم يتم التحقق منه؛ لم يتم تحديده كسياسة التحقق.
Unicode في المطالبات - لماذا يجب قراءة وحدات البايت التي تم فك تشفيرها كـ UTF-8 لعرض الأسماء بشكل صحيح
قد تحتوي المطالبات على علامات تشكيل أو CJK أحرف أو رموز تعبيرية. يعمل Base64 على وحدات البايت، لذا فإن معاملة كل بايت تم فك تشفيره كحرف مستقل يؤدي إلى إتلاف النص متعدد البايت. يتم ترميز المسار الصحيح بالرموز إلى وحدات البايت، ثم وحدة فك ترميز UTF-8. ToolAcre ينشئ `TextDecoder` بالوضع الفادح لذلك يفشل UTF-8 بشكل واضح.
تغطي الاختبارات حمولة تحتوي على `Zoë 世界 🙂` وتتوقع السلسلة الدقيقة بعد فك التشفير. تثبت هذه النتيجة أن خط أنابيب البايت إلى النص يحتفظ بقيمة الاختبار هذه. لا يزال لا يذكر شيئًا عما إذا كان الشخص المذكور بواسطة الحمولة موجودًا، أو ما إذا كان المُصدر قد وافق على المطالبة أو ما إذا كان الرمز المميز قد تم تغييره.
ما لا يغطيه هذا هو جزء التوقيع، الذي يتم فك تشفيره إلى بايت بدلاً من النص ويحتاج إلى مفتاح ليعني أي شيء
مقطع التوقيع خارج المسار JSON. ToolAcre يحتفظ بشكله المشفر الأصلي ويحاول فقط قياس طول البايت الذي تم فك تشفيره. التوقيع غير الصالح Base64 ينتج تحذيرًا ولكنه لا يمنع فحص الرأس والحمولة؛ يُنتج الجزء الثالث الفارغ تحذيرًا مختلفًا بعدم وجود بايتات توقيع.
ولا تمثل أي من النتيجتين نتيجة التحقق. يحتاج التحقق من صحة التوقيع إلى مواد أساسية موثوقة، وخوارزمية مسموح بها يتم اختيارها بشكل مستقل عن المدخلات التي يتحكم فيها المهاجم، وعمليات فحص التطبيق. يكون عدد البايتات مفيدًا عند تشخيص الشكل، لكن لا يمكن لصفر أو اثنين وثلاثين بايتة مقاسة أن تسمح بطلب أو تنشئ جهة إصدار.
الوجبات الجاهزة: استخدم وحدة فك الترميز التي تتحدث base64url - وحدة فك الترميز ToolAcre JWT تتعامل مع الحروف الأبجدية والحشو للرأس والحمولة
استخدم وحدة فك ترميز تفهم base64url عندما تقوم المهمة المباشرة بفحص JSON. يتعامل ToolAcre مع الحروف الأبجدية والحشو المحذوف وUTF-8 الصارم والكائن فقط JSON للجزئين الأولين. كما أنه يرفض الأطوال المستحيلة ويغلف فشل التحليل في الرسائل التي تحدد ما إذا كان الرأس أو الحمولة قد فشلا.
توقف عند تلك الحدود. يعني فك التشفير النظيف أن السلسلة تحتوي على بايتات قابلة للاسترداد وكائنات JSON مناسبة. وهذا لا يعني أن ادعاءاتها جديرة بالثقة أو موثقة أو مصرح بها أو غير معدلة. لا يمكن إلا لمدقق تم تكوينه بشكل منفصل الإجابة على هذه الأسئلة، ولا تكشف أداة المتصفح هذه عمدا عن أي عملية تحقق.