توضيح مصادم HTTP Basic Auth — إنشاء الرؤوس دون تكرار التشفير اليدوي للـ Base64
تُعدّ المصادقة الأساسية (HTTP Basic Auth) أبسط مما يُظهر. اكتشف ما هو موجود فعليًا داخل رأس التصاريح (Authorization header)، وسَبب تشفير البيانات الأساسية بأسلوب base64، وكيفية إنشاء واحدة دون الحاجة إلى الاتصال بطرف الطرف (terminal).
إذا كنت قد اتصلت بـ API ورأيت Authorization: Basic dXNlcjpwYXNz في عناصر رأس الطلب، فقد استخدمت HTTP Basic Auth. تبدو هذه الحالة من الرموز غامضة، لكنها ليست مشفّرة - بل هي مُشفّرة بـ base64. بمجرد أن تفهم ما يوجد في هذا الرأس، لن تُنسخ الرموز بذكاء مرة أخرى.
ما يوجد في رأس التحقق
الصيغة بسيطة جدًا:
Authorization: Basic <credentials>
حيث <credentials> هي ترميز base64 لـ username:password أيًا كان الاسم المستخدم، ثم علامة ترقيم، ثم كلمة المرور، مدمجة ومرمزة.
للاسم المستخدم alice وكلمة المرور secret:
alice:secret
↓ base64 encode
YWxpY2U6c2VjcmV0
Final header:
Authorization: Basic YWxpY2U6c2VjcmV0
هذا هو الميكانيزم الكامل. لا توكينات، لا علامات، لا انتهاء - فقط بيانات التحقق مُرمزة بصيغة يمكن أن تُحمل في رؤوس HTTP.
Base64 هو ترميز، وليس تشفيرًا
يُحول Base64 البيانات الثنائية إلى نص ASCII باستخدام 64 رمزًا قابلًا للطباعة (A-Z، a-z، 0-9، +، /). المعلومة المهمة: أنه يمكن التحويل عكسيًا بسهولة دون مفتاح. أي شخص يُحتجز الرأس يمكنه تشفيره في ثوانٍ.
أثبت ذلك بنفسك في وحدة الطرف:
# Encode
echo -n "alice:secret" | base64
# YWxpY2U6c2VjcmV0
# Decode it back
echo "YWxpY2U6c2VjcmV0" | base64 --decode
# alice:secret
هذا هو السبب في أن استخدام HTTP Basic Auth على HTTP بسيط هو كارثة أمنية - لأن البيانات تُقرأ من قبل أي شخص يمتلك وصولًا إلى الشبكة. استخدم دائمًا HTTPS.
إنشاء الرأس في كودك
تُعالج معظم أدوات HTTP التحقق بسهولة. إليك الطريقة لتكوينه في بيئة شائعة:
curl
# curl adds the Authorization: Basic header automatically
curl -u alice:secret https://api.example.com/endpoint
البناء اليدوي (bash)
CREDENTIALS=$(echo -n "alice:secret" | base64)
curl -H "Authorization: Basic $CREDENTIALS" https://api.example.com/endpoint
بايثون
import base64
import requests
credentials = base64.b64encode(b"alice:secret").decode("utf-8")
headers = {"Authorization": f"Basic {credentials}"}
response = requests.get("https://api.example.com/endpoint", headers=headers)
جافا سكريبت
const credentials = btoa("alice:secret");
fetch("https://api.example.com/endpoint", {
headers: { "Authorization": `Basic ${credentials}` }
});
بدلاً من ترميزه يدويًا كل مرة، استخدم مولد المصادقة الأساسية — انسخ بيانات التحقق واحصل على قيمة الرأس جاهزة للنسخ في لحظة واحدة.
متى تستخدم Basic Auth (ومتى تتجاهلها)
تتناسب Basic Auth مع بعض السيناريوهات:
- الواجهات الداخلية والأساليب — عندما تتحكم في الطرفين وتوفر تشفير TLS
- التحقق من ويب هوك بسيط — تدعم العديد من الخدمات هذا للويب هوكات الدخول
- التطوير والاختبار — سهل التكوين، سهل التدقيق
- التكامل مع أنظمة قديمة — غالبًا ما تتطلب واجهات برمجية قديمة ذلك
أتركها لصالح OAuth، JWT، أو مفاتيح API عندما:
- أنت تبني واجهة برمجية عامة
- أنت بحاجة إلى انتهاء أو إلغاء توكين دون تغيير كلمة المرور
- يقوم المستخدمون بالتحقق من خلال المتصفح (يوفر OAuth تجربة مستخدم أفضل)
- لا يمكنك ضمان استخدام HTTPS في كل خطوة من الطلب
الصورة الحقيقية للأمن
لا تُعتبر Basic Auth غير آمنة من طبيعتها - بل مجرد بيانات بسيطة. الأمان يعتمد بالكامل على طبقة النقل:
- مع HTTPS: تُشفّر بيانات التحقق أثناء النقل. يُعتبر رأس التحقق آمنًا كما تُعتبر تطبيقات TLS.
- بدون HTTPS: يستطيع أي شخص على الشبكة قراءة الرأس بوضوح. لا تقم بذلك في الإنتاج.
محدودية عملية مهمة يجب معرفتها: لا يوجد ميكانيزم لتسجيل الخروج مدمج. يتم إرسال بيانات التحقق مع كل طلب طوال فترة الجلسة. بالنسبة لأي شيء يرتبط بحسابات المستخدمين أو إدارة الجلسات، يناسب استخدام نظام مُعتمد (مثل OAuth أو توكينات الجلسة) أكثر.
أعد توليد رأسك دون استخدام حسابات base64
إذا كنت بحاجة إلى رأس مُرَمَّز بشكل صحيح لطلب API، أو تكوين خدمة، أو أمر curl، فإن مولد المصادقة الأساسية يقوم بترميز وتنسيق الرأس نيابة عنك. أدخل اسم المستخدم وكلمة المرور، واحصل على قيمة الرأس. لا حاجة لوحدة الطرف، لا أوامر base64، لا أخطاء.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
