متوفر أيضًا بلغات أخرى: English · Español · Português · Français
WWW-Authenticate: كل التحديات، لا الأول وحده
الصق ترويسة استجابة 401 لترى كل تحدٍّ وكل وسيط وما يقوله المعيار في شأنه.
ما ترويسة WWW-Authenticate؟
حين يردّ الخادم على طلب بالرمز 401 Unauthorized، عليه أن يبيّن كيف يمكنك إثبات هويتك. وتلك هي ترويسة WWW-Authenticate: قائمة تحديات، يسمّي كل واحد منها مخططًا مثل Basic أو Bearer، ويحمل عادةً وسائط مثل realm. فيختار العميل مخططًا يفهمه ويردّ بترويسة Authorization.
تبدو الترويسة بسيطة وليست كذلك. يقول معيار RFC 9110 ذلك بنفسه، وينصح وكلاء المستخدم بعناية خاصة عند تحليلها، لأن القيمة الواحدة قد تحوي أكثر من تحدٍّ، وقد يحمل كل تحدٍّ قائمة وسائط مفصولة بالفواصل، وقد تُرسَل الترويسة عدة مرات. والفاصل بين التحديات والفاصل بين الوسائط هو المحرف نفسه، فلا شيء في الموضع يدل على أي الاثنين تكون فاصلة بعينها.
تنفّذ هذه الصفحة قواعد المواصفة، وتعرض كل التحديات لا الأول وحده، وتسمّي كل وسيط بالصيغة التي ورد بها. وهي تحلّل التحدي الذي يرسله الخادم. وترفض عمدًا فكّ ترميز ترويسة Authorization، فتلك هي الاستجابة التي تحمل بيانات اعتمادك.
طريقة الاستخدام
- الصق الترويسة. باسم الحقل أو بدونه، وواحدة في كل سطر إن أرسلت الاستجابة أكثر من واحدة. فعدة ترويسات وقيمة واحدة مفصولة بالفواصل متكافئتان وفق المعيار، ومن ثم تعطيان الإجابة نفسها.
- اقرأ التحديات. يعرض كل تحدٍّ مخططه، وهل هو في سجل IANA، وجدولًا بالوسائط يبيّن هل ورد كل قيمة رمزًا بلا اقتباس، أو سلسلة بين علامتي اقتباس، أو بين علامتي اقتباس مع هروب بداخلها.
- انظر الملاحظات أدناه. وهي تغطي ما للمعيار فيه رأي: أكثر من تحدٍّ في السطر الواحد، أو مخطط غير مسجَّل، أو فاصلة شاردة، أو وسيط مكرر، أو مخطط معروف لا يرد أولًا.
لماذا يصعب تحليل هذه الترويسة
تعطي المواصفة مثالًا محلولًا، ثم تفعل ما نادرًا ما تفعله: تخبرك بالجواب. تعرض تحديًا من نوع Basic قيمة realm فيه simple، يليه تحدٍّ من نوع Newauth قيمة realm فيه apps، مع وسيط type ووسيط title، كل ذلك في سطر واحد. وتقرّر أن هذين تحدّيان اثنان، وأن type وtitle يخصان الثاني.
واستخلاص ذلك يقتضي رمزًا واحدًا من الاستباق. فحين يبلغ المحلّل الكلمة type، ليس فيما قبلها ما يدل هل تفتح تحديًا ثالثًا أم تسمّي وسيطًا للثاني. ولا يحسم الأمر إلا المحرف التالي: رمز يليه علامة يساوٍ فهو وسيط، ورمز يليه أي شيء آخر فهو مخطط جديد. ومن فاتته هذه القاعدة خرج بتحليل معقول المظهر وخاطئ ببساطة.
ويخبّئ المثال نفسه فخًّا ثانيًا. فوسيط title فيه سلسلة بين علامتي اقتباس تحتوي هي نفسها على علامات اقتباس، مهروبة بشرطات مائلة عكسية. والمحلّل المبني على الانتقال من علامة اقتباس إلى التي تليها يقف في الموضع الخطأ، والفاصلة داخل قيمة مقتبسة تشطر تحديًا كان ينبغي أن يبقى كاملًا.
وليس هذا قلقًا نظريًّا. فأثناء بناء هذه الصفحة، جرى اختبار محلّلَين منشورَين على مثال المواصفة نفسها. ولم يُعِد أي منهما الجواب الذي تطبعه المواصفة: أحدهما أبلغ عن تحدٍّ واحد بدُمج قيمتَي realm معًا، والآخر لم يُعِد شيئًا البتة، مع أنه يتعامل مع تحدي Basic العادي على أتم وجه. وقد توقّع المعيار ذلك، إذ حذّر من أن إرسال أكثر من تحدٍّ في سطر واحد قد لا يكون قابلًا للتشغيل البيني، وحذّر منفصلًا من أن كثيرًا من العملاء يخفق مع مخطط لا يعرفه.
ما ترفض هذه الصفحة فعله عمدًا
لن تفكّ ترميز ترويسة Authorization. فترويسة WWW-Authenticate تنتقل من الخادم وهي علنية: إنها السؤال. أما Authorization فتنتقل من العميل وتحمل الجواب، وهو في حالة Basic اسم المستخدم وكلمة المرور في تنكّر رقيق. فإن لصقت واحدة هنا، أخبرتك الصفحة وتوقفت، دون فكّ ترميزها. وهذا هو الموقف نفسه الذي يتخذه هذا الموقع في فاكّ ترميز JWT لديه، إذ لا حقل فيه لمفتاح التوقيع: فلصق بيانات اعتماد في أي مكان عادة لا تستحق أن تُكتسب، ولا حتى في صفحة تعمل بالكامل داخل متصفحك أنت.
وهي تخبرك بما تقوله القواعد، لا بما سيفعله عميلك. فقد يكون التحدي صحيحًا تمامًا ويُتجاهل مع ذلك، لأن المتصفح لا ينفّذ إلا حفنة من المخططات، وقد تتوقف المكتبة عند أول تحدٍّ تعرفه. ولم يُقَس شيء هنا في مواجهة متصفح، ولا تدّعي هذه الصفحة شيئًا عن أي منها.
ولا تحكم كذلك على غياب realm. من المغري عدّ ذلك خطأً، لكن المعيار يصف وسيط realm بأنه محجوز للمخططات التي ترغب في بيان نطاق حماية، لا بوصفه شيئًا يلزم كل تحدٍّ حمله. وحيث تمتنع المواصفة عن الإلزام، تمتنع هذه الصفحة عن التحذير.
وثمة حالة ملتبسة حقًّا يُبلَّغ عنها بدل حسمها. فعلامة يساوٍ في النهاية بعد اسم مفرد، كتحدٍّ ينتهي بـ realm=، توافق قواعد الرمز المبهم بقدر ما توافق قواعد وسيط بقي بلا قيمة، لأن ذلك الاشتقاق سلسلة محارف يتبعها أي عدد من علامات اليساوي. ولا شيء في ذلك الموضع من النص يميّز بينهما. وحيث يترك المعيار قراءتين مفتوحتين، تفعل هذه الصفحة مثله.
لماذا هي مجانية؟
تحليل ترويسة معالجةٌ لسلاسل نصية، ويجري داخل متصفحك. لا خادم في المسار، فلا شيء يستوجب فاتورة ولا حساب يلزم إنشاؤه.
لا يُرفع أي شيء. فالترويسة التي تلصقها لا تغادر التبويب.