إدارة كلمات المرور
هيّئ تجزئة كلمات المرور بـ PBKDF2-SHA256، وإعادة التعيين عبر سطر أوامر المشرف أو الـ API، وتدفقات إعادة التعيين الذاتية بالرموز، وتخزين بيانات الاعتماد في SQLite أو PostgreSQL في Potato.
جديد في الإصدار v2.4.0
يستخدم نظام المصادقة في Potato خوارزمية PBKDF2-SHA256 بـ 100000 تكرار مع ملح خاص بكل مستخدم — وهو الأسلوب نفسه الذي يوصي به NIST لتخزين كلمات المرور بأمان. تشرح هذه الصفحة كيف تُخزَّن كلمات المرور، وكيف تُعاد تعيينها، وكيف تُحفظ بيانات الاعتماد بين عمليات إعادة تشغيل الخادم.
تفاصيل التنفيذ الأمني
تُخزَّن كلمات المرور بصيغة salt$hash:
- ملح سداسي عشري من 32 محرفاً، فريد لكل مستخدم
- تجزئة SHA-256 من 64 محرفاً لـ
salt + password - مقارنة بزمن ثابت عبر
hmac.compare_digestلمنع هجمات التوقيت
أما كلمات المرور الموجودة كنص صريح في ملفات user_config.jsonl فتُعاد تجزئتها تلقائياً بأملاح فريدة عند تحميلها في Potato — لا حاجة إلى ترحيل يدوي.
التهيئة الافتراضية
يستخدم Potato افتراضياً المصادقة في الذاكرة. ويجب إدراج المعلّقين في ملف التهيئة:
authentication:
method: in_memory
require_password: true
user_config:
users:
- username: "annotator1"
password: "initial-password" # will be hashed on first load
- username: "annotator2"
password: "initial-password"بيانات الاعتماد الدائمة
تضيع بيانات الاعتماد المخزنة في الذاكرة عند إعادة التشغيل. وللتخزين الدائم، استخدم واجهة خلفية تعتمد على ملف أو قاعدة بيانات.
الحفظ في ملف
authentication:
method: in_memory
user_config_path: /shared/path/to/user_config.jsonlيكتب Potato بيانات الاعتماد المجزّأة في هذا الملف، ويقرأها عند إعادة التشغيل — فتبقى كلمات المرور التي ضُبطت أو غُيّرت أثناء الجلسة بعد إعادة التشغيل.
قاعدة بيانات
SQLite (بلا اعتماديات إضافية):
authentication:
method: database
database_url: "sqlite:///auth/users.db"PostgreSQL (تتطلب psycopg2-binary):
authentication:
method: database
database_url: "postgresql://user:password@localhost:5432/potato_auth"تُنشأ جداول قاعدة البيانات تلقائياً عند أول تشغيل.
ملاحظة: لا يجتمع method: database مع user_config_path — اختر إحدى استراتيجيتي الحفظ.
إعادة تعيين كلمات المرور
سطر أوامر المشرف
أعد تعيين كلمة مرور من سطر الأوامر:
# Reset a specific user's password
potato reset-password config.yaml --username annotator1
# Prompted for new password interactivelyواجهة برمجة المشرف
أعد التعيين برمجياً باستخدام مفتاح API:
curl -X POST http://localhost:8000/admin/reset_password \
-H "X-API-Key: $ADMIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "annotator1", "new_password": "new-secure-password"}'إعادة التعيين الذاتية بالرموز
يدعم Potato تدفق إعادة تعيين يبدأه المستخدم نفسه. ينتقل المستخدمون إلى /forgot-password، ويدخلون اسم المستخدم، فيحصلون على رمز إعادة تعيين يُستخدم مرة واحدة. ثم يزورون /reset/<token> لضبط كلمة مرور جديدة.
تصلح الرموز لمدة 24 ساعة ولا تُستخدم إلا مرة واحدة. ولا يرسل Potato رسائل بريد إلكتروني — يوزّع المشرف رابط إعادة التعيين يدوياً.
التفعيل في ملف التهيئة:
authentication:
method: database
database_url: "sqlite:///auth/users.db"
allow_password_reset: true
reset_token_ttl_hours: 24سير عمل المشرف:
# Generate a reset token for a user
curl -X POST http://localhost:8000/admin/generate_reset_token \
-H "X-API-Key: $ADMIN_API_KEY" \
-d '{"username": "annotator1"}'
# Returns: {"reset_url": "https://your-server.com/reset/abc123..."}
# Share this URL with the annotatorالوضع بلا كلمة مرور
في العروض الصفية والدراسات السريعة والمهام التي تعتمد مصادقة خارجية (MTurk وProlific)، يمكنك تعطيل كلمات المرور بالكامل:
authentication:
method: in_memory
require_password: falseيدخل المعلّقون بأي اسم مستخدم — ولا تظهر مطالبة بكلمة مرور. وهذا غير مستحسن للبيانات الحساسة أو المهام التي تتطلب هوية موثّقة.
راجع تسجيل الدخول بدون كلمة مرور للتفاصيل.
المرجع الكامل
authentication:
method: in_memory # in_memory | database | oauth | clerk
# In-memory options
require_password: true
user_config_path: path/to/users.jsonl # optional persistence
# Database options (mutually exclusive with user_config_path)
database_url: "sqlite:///auth/users.db"
# Self-service reset
allow_password_reset: true
reset_token_ttl_hours: 24
user_config:
users:
- username: "researcher"
password: "secure-passphrase"
role: admin
- username: "annotator1"
password: "initial-pass"
role: annotatorقراءة إضافية
- مصادقة SSO وOAuth — تسجيل الدخول عبر Google أو GitHub أو نظام SSO المؤسسي
- تسجيل الدخول بدون كلمة مرور — وصول باسم المستخدم فقط للمهام المفتوحة
- إعداد الإنتاج — تهيئة HTTPS والوسيط العكسي
- لوحة تحكم المشرف — إدارة حسابات المعلّقين
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.