
🔐 تعلم المصادقة من خلال بنائها بشكل صحيح. تنفيذ مرجعي قابل للتوسيع ومتوافق مع المعايير لـ Cloudflare Workers مع Hono وTurso وPBKDF2 وجلسات JWT ذات الرمزين المزدوجين.
تعلم المصادقة من خلال بنائها بالطريقة الصحيحة.
العرض المباشر · نموذج التهديد · تدفقات المصادقة · سجلات القرارات المعمارية
ملاحظة العرض التوضيحي: نقطة نهاية تسجيل الدخول محمية بتحديات إثبات العمل التكيفية — يؤدي الفشل المتكرر إلى زيادة صعوبة إثبات العمل. تم تنفيذ واختبار تحديد معدل الطلب المدعوم بالذاكرة المؤقتة ولكنه غير مُفعل حاليًا في العرض المباشر؛ قم بتبديل
createCacheClientفيapp.tsلتفعيله.
تنفيذ مرجعي للمصادقة من الصفر لـ Cloudflare Workers — تجزئة كلمة المرور بـ PBKDF2، جلسات الرمز المزدوج JWT، المقارنة في وقت ثابت، انتهاء الصلاحية المتحرك، ومكون إضافي قابل للإزالة للمراقبة — كل ذلك متصل مع Hono و Turso (مع تخزين اختياري لـ Valkey/Redis) و TypeScript صارم.
كل خيار تصميمي يعود إلى معيار: NIST SP 800-63B لبيانات الاعتماد، NIST SP 800-132 لاستخلاص المفاتيح، OWASP ASVS للتحقق، و RFC 8725 لأفضل ممارسات JWT.
تريد شحن منتج؟ استخدم Better Auth بدلاً من ذلك — فهو يغطي OAuth ومفاتيح المرور والمصادقة متعددة العوامل وتحديد معدل الطلب والمزيد من الصندوق مع نظام إضافات نشط. هذا المستودع موجود ليعلمك كيف تعمل المصادقة، وليس لاستبدال مكتبة إنتاجية.
هذا المشروع يتعمد حذف الميزات التي تقع خارج نطاقه التعليمي. إذا كنت توسّع هذا الكود نحو الإنتاج (أو تقيّم ما يتطلبه نظام مصادقة إنتاجي)، فإن الجداول أدناه تنظم الفجوات حسب مستوى الأولوية.
بالنسبة لمعظم المشاريع الواقعية، استخدم Better Auth بدلاً من بناء هذه بنفسك.
| الميزة | لماذا هي مهمة | المعيار / المرجع |
|---|---|---|
| فحص كلمات المرور المخترقة | يمنع استخدام كلمات المرور المعروفة في تسريبات البيانات العامة | NIST SP 800-63B §5.1.1.2، HIBP API |
كل هذه أسباب ممتازة لاستخدام Better Auth بدلاً من ذلك.
.
├── apps/
│ └── cloudflare-workers/ # Example Worker + Hono routes
├── packages/
│ ├── core/ # Auth services, middleware, crypto utilities
│ ├── infrastructure/ # DB client + utilities
│ ├── observability/ # Event emission, adaptive challenges, ops API (removable plugin)
│ ├── schemas/ # Zod schemas
│ └── types/ # Shared TypeScript types
├── tools/
│ └── cli/ # plctl — Go TUI for the /ops surface
└── docs/
├── adr/ # Architecture Decision Records
└── audits/ # Security audits
git clone https://github.com/vhscom/private-landing.git
cd private-landing
bun install
bun run dev
هذا كل شيء — لا حسابات، لا مفاتيح API، لا ملفات .env. خادم التطوير يبدأ بقاعدة بيانات SQLite محلية وأسرار مولَّدة. افتح http://localhost:8788 لتسجيل حساب واستكشاف تدفقات المصادقة.
لديك حساب Turso؟ ضع ملف
.dev.varsفيapps/cloudflare-workers/(انظر.dev.vars.example) وbun run devسيستخدم تلقائياً wrangler مع قاعدة البيانات البعيدة. استخدمbun run dev:localلفرض الخادم المحلي بغض النظر.
انظر CONTRIBUTING.md لتعليمات الاختبار والنشر.
يتضمن هذا المستودع ملف CLAUDE.md الذي يوفر سياقاً للمساعدين الذكاء الاصطناعي. عند استخدام Claude Code أو Cursor أو أدوات تطوير مدعومة بالذكاء الاصطناعي مماثلة:
CLAUDE.md لسياق المشروعdocs/adr/ تشرح خيارات التصميمdocs/audits/ توثق الوضع الأمنيتم تصميم قاعدة الكود لتكون قابلة للقراءة من قبل الذكاء الاصطناعي مع حدود وحدة واضحة، أنواع شاملة، وتسمية وصفية.
| الطبقة | ماذا تفعل |
|---|
| تخزين كلمة المرور | PBKDF2-SHA384 مع أملاح 128-بت، ملخص سلامة، تتبع الإصدار (password-service.ts) |
| إدارة الجلسات | جلسات من جانب الخادم مع تتبع الجهاز، انتهاء صلاحية متحرك، تطبيق حد أقصى 3 جلسات لكل مستخدم؛ جلسات اختيارية مدعومة بالذاكرة المؤقتة عبر Valkey/Redis (session-service.ts، cached-session-service.ts) |
| تغيير كلمة المرور | إعادة التحقق من كلمة المرور الحالية، إعادة تجزئة كاملة لـ PBKDF2، إلغاء ذري لجميع الجلسات (account-service.ts، ADR-004) |
| نمط الرمز المزدوج JWT | رمز وصول لمدة 15 دقيقة + رمز تحديث لمدة 7 أيام، مرتبط بالجلسة للإلغاء (token-service.ts) |
| وسيط المصادقة | تدفق تحديث تلقائي، تثبيت صريح لـ HS256، التحقق من ادعاء typ (require-auth.ts) |
| ملفات تعريف الارتباط الآمنة | HttpOnly، Secure، SameSite=Strict، Path=/ (cookie.ts) |
| رؤوس الأمان | HSTS، CSP، CORP/COEP/COOP، سياسة الأذونات، إزالة بصمة الجهاز (security.ts) |
| التحقق من الإدخال | مخططات Zod مع سياسة كلمة مرور متوافقة مع NIST (الطول فقط، لا قواعد تعقيد) |
| تحديد معدل الطلب | خنق نافذة ثابتة ضد هجمات القوة العمياء وحشو بيانات الاعتماد: مقيد بعنوان IP على مسارات المصادقة العامة (مثل تسجيل الدخول)، ومقيد بالمستخدم على الإجراءات المحمية؛ لا إغلاق صارم (متوافق مع NIST) (ADR-006) |
| المكون الإضافي للمراقبة | أحداث أمنية منظمة، تحديات إثبات عمل تكيفية، واجهة برمجة تطبيقات /ops مُوثَّقة بواسطة وكيل — يتم توصيله عبر وسيط، قابل للإزالة بحذف حزمة واحدة (ADR-008) |
| أدوات سطر الأوامر | واجهة مستخدم نصية Go (plctl) للاستعلام عن الأحداث، إدارة الجلسات، وتوفير بيانات اعتماد الوكيل عبر سطح /ops (tools/cli/) |
| اختبارات متجهات الهجوم | التلاعب بالرمز JWT، الارتباك في الخوارزمية، ارتباك النوع، حالات الحافة لـ Unicode، فحوصات تسريب المعلومات |
| الميزة | لماذا هي مهمة | المعيار / المرجع |
|---|
| حماية CSRF (إذا تم تخفيف SameSite) | SameSite=Strict يمنع حالياً CSRF؛ إذا تم تغييره إلى Lax لتجربة المستخدم، فيلزم رمز صريح | OWASP CSRF Cheat Sheet |
| تدوير رمز التحديث | يكشف سرقة الرمز — إذا تم إعادة استخدام رمز تحديث تم تدويره، قم بإلغاء عائلة الجلسة بأكملها | RFC 6819 §5.2.2.3 |
ادعاء aud في JWTs | يمنع قبول رمز من خدمة واحدة بواسطة خدمة أخرى تشارك نفس السر | RFC 7519 §4.1.3، RFC 8725 §3.9 |
| أرقام عشوائية CSP للبرامج النصية المضمنة | CSP الحالي يستخدم 'unsafe-inline'؛ الأرقام العشوائية تقضي على نواقل XSS للبرامج النصية المضمنة | MDN CSP script-src |
| الميزة | لماذا هي مهمة | المعيار / المرجع |
|---|
| مصادقة متعددة العوامل TOTP | يضيف عاملاً ثانياً للحسابات عالية القيمة | RFC 6238، NIST SP 800-63B §5.1.4 |
| WebAuthn / مفاتيح المرور | مصادقة مقاومة للتصيد باستخدام المصادقات الأساسية | WebAuthn Level 2 |
| OAuth / تسجيل الدخول الاجتماعي | يقلل الاحتكاك، يتجنب إرهاق كلمة المرور | RFC 6749 |
| الروابط السحرية / OTP | خيار بدون كلمة مرور للتدفقات منخفضة المخاطر | NIST SP 800-63B §5.1.3 |
| تحليلات الجلسة | تتبع الجهاز، رؤية الجلسات المتزامنة، كشف الحالات الشاذة | OWASP Session Management Cheat Sheet |
| تدوير مفتاح التوقيع | يسمح بتدوير السر بشكل دوري دون إبطال جميع الجلسات | RFC 7517 (JWK) |
| الميزة | لماذا هي مهمة | المعيار / المرجع |
|---|
| DPoP / ربط الرمز | يربط الرموز باتصال TLS للعميل، مما يمنع إعادة تشغيل التسريب | RFC 9449 (DPoP) |
| تعدد الإيجار | يعزل مجموعات المستخدمين والأسرار والسياسات لكل مستأجر | خاص بالتطبيق |
| السياج الجغرافي / سمعة IP | يمنع تسجيلات الدخول من مناطق غير متوقعة أو عناوين IP معروفة بأنها سيئة | OWASP ASVS v5.0 §6.3.5 |
| المصادقة التكيفية | يزيد متطلبات المصادقة بناءً على إشارات المخاطرة (الجهاز، الموقع، السلوك) | NIST SP 800-63B §6 |
| ترقية تكرار PBKDF2 أو Argon2id | OWASP يوصي بـ 210,000 تكرار لـ PBKDF2-SHA512 (Cloudflare يحد إلى 100k)؛ Argon2id مقاوم للذاكرة | OWASP Password Storage Cheat Sheet |