مولّد ترويسة Basic Auth

أدخل اسم المستخدم وكلمة المرور لتحصل على ترويسة Authorization: Basic وأمر curl جاهز للتشغيل، أو الصق ترويسة موجودة لترى بيانات الاعتماد التي تتضمنها.

ترويسة Authorization
أمر curl

فك ترميز ترويسة موجودة

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. أدخل اسم المستخدم وكلمة المرور.
  2. انسخ ترويسة Authorization الناتجة إلى برنامج العميل لديك، أو استخدم أمر curl لاختبار الطلب.
  3. لقراءة ترويسة موجودة، الصقها في قسم «فك ترميز ترويسة موجودة» ليظهر اسم المستخدم وكلمة المرور.

كيف تعمل مصادقة HTTP Basic

تُعرَّف المصادقة الأساسية (Basic) في RFC 7617. فعندما يكون المورد محميًا، يرد الخادم بالحالة 401 Unauthorized والترويسة WWW-Authenticate: Basic realm="...". عندئذ يضم العميل اسم المستخدم وكلمة المرور وبينهما نقطتان (:)، ويرمّز النتيجة بـ Base64، ثم يرسلها مع كل طلب:

Authorization: Basic base64(username ":" password)

# مثال من RFC 7617: المستخدم "Aladdin" وكلمة المرور "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

تتولى المتصفحات هذا التبادل بنفسها وتعرض نافذة لتسجيل الدخول، بينما ترسل السكربتات وعملاء واجهات API الترويسة عادةً مع الطلب الأول دون انتظار طلب المصادقة من الخادم. ولأن النقطتين تفصلان بين القيمتين، يجب ألا يحتوي اسم المستخدم عليهما، في حين يجوز ذلك لكلمة المرور. ويمكن للخادم إضافة charset="UTF-8" إلى طلب المصادقة ليعلن أنه يتوقع بيانات الاعتماد التي تتضمن أحرفًا غير ASCII بترميز UTF-8.

Base64 ليس تشفيرًا

تبدو الترويسة مبعثرة، لكن أي شخص يراها يستطيع استعادة كلمة المرور في ثوانٍ، سواء بأداة فك الترميز في هذه الصفحة أو بأي أداة لفك ترميز Base64. لا تكون المصادقة الأساسية مقبولة إلا عبر HTTPS، حيث يشفّر TLS الترويسة أثناء النقل. وضع في اعتبارك أيضًا أن:

  • بيانات الاعتماد تنتقل مع كل طلب، لذا يكفي طلب واحد عبر HTTP غير المشفّر لكشفها؛
  • الخوادم الوكيلة وموازنات الأحمال وأدوات التنقيح قد تسجّل الترويسة Authorization ما لم تُضبط على خلاف ذلك؛
  • المتصفحات تتذكر بيانات الاعتماد المُدخلة حتى إغلاقها، ولا توجد طريقة قياسية لتسجيل الخروج.

بالنسبة إلى واجهات API العامة، تُعد رموز API القابلة للإلغاء أو OAuth خيارًا أنسب. وتبقى المصادقة الأساسية خيارًا معقولًا للأدوات الداخلية وبيئات الاختبار التمهيدية والاتصالات بين الخوادم عبر TLS.

إرسال الترويسة من الشيفرة

# يبني curl الترويسة بنفسه
curl -u 'user:password' https://api.example.com/

// fetch في JavaScript (لا تتعامل btoa إلا مع أحرف Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# مكتبة requests في Python
requests.get(url, auth=('user', 'password'))

تجنّب تضمين بيانات الاعتماد في عنوان URL، كما في https://user:password@host/. فهذه الصيغة مهملة في RFC 3986، وينتهي بها المطاف في سجل المتصفح وسجلات الخادم، كما تقيّدها المتصفحات الحديثة.

الأسئلة الشائعة

كيف أفك ترميز ترويسة Basic Auth؟

الصق الترويسة في قسم «فك ترميز ترويسة موجودة» فيظهر اسم المستخدم وكلمة المرور فورًا. وأي أداة لفك ترميز Base64 تعطي النتيجة نفسها، ولهذا تحديدًا يجب ألا تنتقل الترويسة إلا عبر HTTPS.

هل يمكن أن تحتوي كلمة المرور على نقطتين؟

نعم. يقسم الخادم القيمة بعد فك ترميزها عند أول نقطتين، لذا فكل ما يأتي بعدهما ينتمي إلى كلمة المرور. أما اسم المستخدم فيجب ألا يحتوي على نقطتين.

هل مصادقة HTTP Basic آمنة؟

عبر HTTPS ومع كلمة مرور قوية وفريدة، تحمي بيانات الاعتماد أثناء النقل، لكنها تُرسل مع كل طلب ولا يمكن أن تنتهي صلاحيتها كما هي الحال مع الرموز المميزة. لا تستخدمها أبدًا عبر HTTP غير المشفّر.

لماذا يفشل تسجيل الدخول بكلمات مرور تحتوي على أحرف بعلامات صوتية أو أحرف غير لاتينية؟
قد يختلف العميل والخادم في ترميز الأحرف. يتيح RFC 7617 للخادم أن يعلن charset="UTF-8"؛ ومن دونه قد تفترض الخوادم الأقدم ترميز ISO-8859-1 فتقارن بايتات مختلفة.
هل تُرسل كلمة المرور إلى أي مكان؟

لا. تُبنى الترويسة بواسطة JavaScript في متصفحك ولا يُرسل أي شيء. ومع ذلك، استخدم بيانات اعتماد تجريبية عند مشاركة أمر curl الناتج مع الآخرين.