ما هو LDAP
LDAP هو بروتوكول مصادقة يُستخدم للتحقق من الهوية خارجيًا. يوفّر Overleaf Server Pro نموذج تسجيل دخول مخصصًا لـ LDAP في واجهة الويب، منفصلًا عن طريقة المصادقة القياسية. عندما يُدخل المستخدم اسم المستخدم وكلمة المرور الخاصين به في LDAP، تتحقق الواجهة الخلفية لـ Overleaf من بيانات الاعتماد مقابل خادم LDAP المُعدّ، على سبيل المثالldap://ldap:10389.

مثال على LDAP في Server Pro
الإعداد
داخليًا، يستخدم LDAP في Overleaf مكتبة passport-ldapauth. وتُمرَّر معظم خيارات الإعداد هذه إلى كائن الإعدادserver الذي يُستخدم لإعداد passport-ldapauth. إذا واجهت مشكلات في إعداد LDAP، فمن المفيد قراءة ملف README الخاص بـ passport-ldapauth لفهم الإعدادات التي يتوقعها.
متغير البيئة EXTERNAL_AUTH مطلوب لتفعيل وحدة المصادقة عبر LDAP. يحدد متغير البيئة هذا طرق المصادقة الخارجية المفعّلة. وقيمة هذا المتغير عبارة عن قائمة. إذا تضمنت القائمة ldap فسيتم تفعيل المصادقة عبر LDAP.
على سبيل المثال: EXTERNAL_AUTH=ldap saml
على خلاف Overleaf CEP، فإننا في إصدار ayaka-notes نقصر المصادقة عبر LDAP على كونها طريقة مصادقة بحتة، وهي متاحة على http://your-overleaf.com/ldap/login.
عند استخدام طرق المصادقة عبر LDAP، يُدخل المستخدم username و password في نموذج تسجيل الدخول، وتتم المحاولة كما يلي:
- يتم البحث عن مستخدم LDAP في دليل LDAP باستخدام المرشّح المحدد في
OVERLEAF_LDAP_SEARCH_FILTERثم تتم مصادقته. - إذا نجحت المصادقة، يتم فحص قاعدة بيانات مستخدمي Overleaf بحثًا عن مستخدم يطابق عنوان بريده الإلكتروني الأساسي عنوانَ البريد الإلكتروني لمستخدم LDAP الذي تمت مصادقته:
- إذا عُثر على مستخدم مطابق، يُحذف الحقل
hashedPasswordلهذا المستخدم (إن وُجد). ويضمن ذلك أن المستخدم لن يتمكن مستقبلًا من تسجيل الدخول إلا عبر المصادقة بـ LDAP. - إذا لم يُعثر على مستخدم مطابق، يتم إنشاء مستخدم Overleaf جديد باستخدام البريد الإلكتروني والاسم الأول واسم العائلة المسترجعة من خادم LDAP.
- إذا عُثر على مستخدم مطابق، يُحذف الحقل
متغيرات البيئة
OVERLEAF_LDAP_URL(مطلوب)- عنوان URL لخادم LDAP.
- مثال:
ldaps://ldap.example.com:636(LDAP عبر SSL) - مثال:
ldap://ldap.example.com:389(غير مشفّر أو STARTTLS، إذا تم إعداده).
- مثال:
- عنوان URL لخادم LDAP.
OVERLEAF_LDAP_IDENTITY_SERVICE_NAME- الاسم المعروض لخدمة هوية LDAP، ويُستخدم في صفحة تسجيل الدخول.
- القيمة الافتراضية
Log in with LDAP Provider.
OVERLEAF_LDAP_EMAIL_ATT- سمة البريد الإلكتروني التي يُرجعها خادم LDAP، والقيمة الافتراضية
mail. يجب أن يكون لكل مستخدم LDAP عنوان بريد إلكتروني واحد على الأقل. وإذا تم توفير عدة عناوين، فسيُستخدم الأول فقط.
- سمة البريد الإلكتروني التي يُرجعها خادم LDAP، والقيمة الافتراضية
OVERLEAF_LDAP_FIRST_NAME_ATT- اسم الخاصية التي تحتوي على الاسم الأول للمستخدم والذي يُستخدم في التطبيق، وعادةً ما تكون
givenName.
- اسم الخاصية التي تحتوي على الاسم الأول للمستخدم والذي يُستخدم في التطبيق، وعادةً ما تكون
OVERLEAF_LDAP_LAST_NAME_ATT- اسم الخاصية التي تحتوي على اسم عائلة المستخدم والذي يُستخدم في التطبيق، وعادةً ما تكون
sn.
- اسم الخاصية التي تحتوي على اسم عائلة المستخدم والذي يُستخدم في التطبيق، وعادةً ما تكون
OVERLEAF_LDAP_NAME_ATT- اسم الخاصية التي تحتوي على الاسم الكامل للمستخدم، وعادةً ما تكون
cn. إذا لم يتم تعريف أيٍّ من المتغيرين السابقين، يُستخرج الاسم الأول و/أو اسم العائلة للمستخدم من هذا المتغير. وإلا فلا يُستخدم.
- اسم الخاصية التي تحتوي على الاسم الكامل للمستخدم، وعادةً ما تكون
OVERLEAF_LDAP_PLACEHOLDER- النص النائب (placeholder) لنموذج تسجيل الدخول، والقيمة الافتراضية
Username.
- النص النائب (placeholder) لنموذج تسجيل الدخول، والقيمة الافتراضية
OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN- إذا عُيّن إلى
true، فسيتم تحديث الحقلينfirst_nameوlast_nameلمستخدم LDAP عند تسجيل الدخول، وإيقاف نموذج تفاصيل المستخدم في الصفحة/user/settingsلمستخدمي LDAP. وإلا فسيتم جلب التفاصيل عند تسجيل الدخول الأول فقط.
- إذا عُيّن إلى
OVERLEAF_LDAP_BIND_DN- الاسم المميّز (DN) لمستخدم LDAP الذي يجب استخدامه لاتصال LDAP (يجب أن يكون هذا المستخدم قادرًا على البحث في الحسابات وسردها على خادم LDAP)، مثل
cn=ldap_reader,dc=example,dc=com. إذا لم يتم تعريفه، فسيُستخدم الربط المجهول (anonymous binding).
- الاسم المميّز (DN) لمستخدم LDAP الذي يجب استخدامه لاتصال LDAP (يجب أن يكون هذا المستخدم قادرًا على البحث في الحسابات وسردها على خادم LDAP)، مثل
OVERLEAF_LDAP_BIND_CREDENTIALS- كلمة المرور الخاصة بـ
OVERLEAF_LDAP_BIND_DN.
- كلمة المرور الخاصة بـ
OVERLEAF_LDAP_BIND_PROPERTY- خاصية المستخدم التي يتم الربط بها مقابل العميل، والقيمة الافتراضية
dn.
- خاصية المستخدم التي يتم الربط بها مقابل العميل، والقيمة الافتراضية
OVERLEAF_LDAP_SEARCH_BASE(مطلوب)- الاسم المميّز الأساسي (base DN) الذي يبدأ منه البحث عن المستخدمين. مثل
ou=people,dc=example,dc=com.
- الاسم المميّز الأساسي (base DN) الذي يبدأ منه البحث عن المستخدمين. مثل
OVERLEAF_LDAP_SEARCH_FILTER- مرشّح بحث LDAP الذي يُستخدم للعثور على المستخدم. استخدم النص الحرفي ‘{{username}}’ لإدراج اسم المستخدم المُدخل في بحث LDAP.
- مثال:
(|(uid={{username}})(mail={{username}}))(يمكن للمستخدم تسجيل الدخول بالبريد الإلكتروني أو باسم تسجيل الدخول). - مثال:
(sAMAccountName={{username}})(Active Directory).
- مثال:
- مرشّح بحث LDAP الذي يُستخدم للعثور على المستخدم. استخدم النص الحرفي ‘{{username}}’ لإدراج اسم المستخدم المُدخل في بحث LDAP.
OVERLEAF_LDAP_SEARCH_SCOPE- يمكن أن يكون نطاق البحث
baseأوoneأوsub(الافتراضي).
- يمكن أن يكون نطاق البحث
OVERLEAF_LDAP_SEARCH_ATTRIBUTES- مصفوفة JSON من السمات المراد جلبها من خادم LDAP، مثل
["uid", "mail", "givenName", "sn"]. افتراضيًا، يتم جلب جميع السمات.
- مصفوفة JSON من السمات المراد جلبها من خادم LDAP، مثل
OVERLEAF_LDAP_STARTTLS- إذا كانت القيمة
true، فسيُستخدم LDAP عبر TLS.
- إذا كانت القيمة
OVERLEAF_LDAP_TLS_OPTS_CA_PATH- مسار الملف الذي يحتوي على شهادة CA المستخدمة للتحقق من شهادة SSL/TLS لخادم LDAP. وإذا كانت هناك عدة شهادات، فيمكن أن يكون مصفوفة JSON من مسارات الشهادات. يجب أن تكون الملفات قابلة للوصول من حاوية docker.
- مثال (شهادة واحدة):
/var/lib/overleaf/certs/ldap_ca_cert.pem - مثال (عدة شهادات):
["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]
- مثال (شهادة واحدة):
- مسار الملف الذي يحتوي على شهادة CA المستخدمة للتحقق من شهادة SSL/TLS لخادم LDAP. وإذا كانت هناك عدة شهادات، فيمكن أن يكون مصفوفة JSON من مسارات الشهادات. يجب أن تكون الملفات قابلة للوصول من حاوية docker.
OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH- إذا كانت القيمة
true، فسيتم التحقق من شهادة الخادم مقابل قائمة جهات CA المزوّدة.
- إذا كانت القيمة
OVERLEAF_LDAP_CACHE- إذا كانت القيمة
true، فسيتم تخزين ما يصل إلى 100 من بيانات الاعتماد في الذاكرة المؤقتة لمدة 5 دقائق.
- إذا كانت القيمة
OVERLEAF_LDAP_TIMEOUT- المدة التي يسمح فيها العميل باستمرار العمليات قبل انتهاء المهلة، بالمللي ثانية (الافتراضي: Infinity).
OVERLEAF_LDAP_CONNECT_TIMEOUT- المدة التي ينتظرها العميل قبل انتهاء مهلة اتصالات TCP، بالمللي ثانية (الافتراضي: القيمة الافتراضية لنظام التشغيل).
OVERLEAF_LDAP_IS_ADMIN_ATTوOVERLEAF_LDAP_IS_ADMIN_ATT_VALUE- عند تعيين كلا متغيري البيئة، تقوم عملية تسجيل الدخول بتحديث
user.isAdmin = trueإذا كان ملف تعريف LDAP يحتوي على السمة المحددة فيOVERLEAF_LDAP_IS_ADMIN_ATTوكانت قيمتها إما مطابقة لـOVERLEAF_LDAP_IS_ADMIN_ATT_VALUEأو مصفوفة تحتوي علىOVERLEAF_LDAP_IS_ADMIN_ATT_VALUE، وإلا فيتم تعيينuser.isAdminإلىfalse. وإذا لم يتم تعيين أيٍّ من هذين المتغيرين، فلن تُعيَّن حالة المسؤول إلىtrueإلا أثناء إنشاء المستخدم المسؤول في Launchpad.
- عند تعيين كلا متغيري البيئة، تقوم عملية تسجيل الدخول بتحديث
OVERLEAF_LDAP_CONTACTS_FILTER- المرشّح المستخدم للبحث عن المستخدمين في خادم LDAP لتحميلهم في جهات الاتصال. يُستبدل النص النائب ‘{{userProperty}}’ داخل المرشّح بقيمة الخاصية المحددة في
OVERLEAF_LDAP_CONTACTS_PROPERTYلمستخدم LDAP الذي بدأ البحث. وإذا لم يتم تعريفه، فلن يُسترجع أي مستخدم من خادم LDAP إلى جهات الاتصال.
- المرشّح المستخدم للبحث عن المستخدمين في خادم LDAP لتحميلهم في جهات الاتصال. يُستبدل النص النائب ‘{{userProperty}}’ داخل المرشّح بقيمة الخاصية المحددة في
OVERLEAF_LDAP_CONTACTS_SEARCH_BASE- يحدد الاسم المميّز الأساسي (base DN) الذي يبدأ منه البحث عن جهات الاتصال. والقيمة الافتراضية هي
OVERLEAF_LDAP_SEARCH_BASE.
- يحدد الاسم المميّز الأساسي (base DN) الذي يبدأ منه البحث عن جهات الاتصال. والقيمة الافتراضية هي
OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE- يمكن أن يكون نطاق البحث
baseأوoneأوsub(الافتراضي).
- يمكن أن يكون نطاق البحث
OVERLEAF_LDAP_CONTACTS_PROPERTY- يحدد خاصية كائن المستخدم التي ستحل محل النص النائب ‘{{userProperty}}’ في
OVERLEAF_LDAP_CONTACTS_FILTER.
- يحدد خاصية كائن المستخدم التي ستحل محل النص النائب ‘{{userProperty}}’ في
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE- يحدد قيمة
OVERLEAF_LDAP_CONTACTS_PROPERTYإذا بدأ البحث مستخدمٌ من غير مستخدمي LDAP. وإذا لم يتم تعريف هذا المتغير، فلن يطابق المرشّح الناتج أي شيء. ويمكن استخدام القيمة*كحرف بدل (wildcard).
- يحدد قيمة
مثال
مثال
gid في جهات اتصال مستخدم LDAP الحالي. أما المستخدمون من غير مستخدمي LDAP فستحتوي جهات اتصالهم على جميع مستخدمي LDAP الذين لديهم UNIX gid=1000.نموذج لملف variables.env
نموذج لملف variables.env
دليل خطوة بخطوة: goauthentik
يشرح هذا الدليل إعدادًا تم اختباره مع goauthentik. تستخدم الأمثلة Base DNdc=example,dc=com؛ استبدله بالقيمة الخاصة بك.
أنشئ حساب الربط (bind)
ldapservice، ثم انقر على Create:
Authentik: إنشاء حساب الربط
OVERLEAF_LDAP_BIND_CREDENTIALS:
Authentik: تعيين كلمة مرور حساب الربط (نسخة اختبارية)
19 في …/#/identity/users/19. ستحتاج إليه في الخطوة 3.أنشئ المزوّد والتطبيق
overleaf-ldap، ثم انقر على Next:
Authentik: اسم التطبيق وslug الخاص به

Authentik: اختيار مزوّد LDAP

Authentik: وضع الربط ووضع البحث لمزوّد LDAP
default-authentication-flow وBase DN على Base DN الخاص بك، على سبيل المثال dc=example,dc=com:
Authentik: تدفق الربط وBase DN لمزوّد LDAP
اسمح لحساب الربط بالبحث في الدليل
ak-managed-role--user-<number>، ثم فعّل Search full LDAP directory:
Authentik: منح حساب الربط صلاحية البحث (نسخة اختبارية)

Authentik: صلاحيات مزوّد LDAP (نسخة اختبارية)
شغّل LDAP outpost

Authentik: LDAP outpost قيد التشغيل (نسخة اختبارية)
املأ قيم DN

Authentik: نظرة عامة على مزوّد LDAP (نسخة اختبارية)
- يعرض Bind DN الحساب الذي سجّلت الدخول به. استخدم بدلًا منه حساب الربط من الخطوة 1:
cn=ldapservice,ou=users,<Base DN>. - يعرض Search base قيمة Base DN. استخدم
ou=users,<Base DN>.
تحقّق من البحث
dn: واحدًا بالضبط:dn: على الإطلاق، فهذا يعني عادةً أن الصلاحية من الخطوة 3 مفقودة.ربط المسؤولين (اختياري)
memberOf على شكل قيم DN تحت ou=groups. لجعل أعضاء مجموعة Authentik Admins مسؤولين في Overleaf:ملف variables.env مُختبَر لـ goauthentik
ملف variables.env مُختبَر لـ goauthentik

