> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/ar/aliadadat/overleaf-toolkit/authentication/ldap-authentication.md).

# مصادقة LDAP

هذه الميزة مطوَّرة بواسطة [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). هنا نقدّم بعض المستندات لتكوينك.

{% hint style="warning" %}
يستخدم Overleaf **passport-ldapauth** مكتبة، وهي قديمة نسبيًا، لذا لا يمكن ضمان توافق LDAP بالكامل. مع بعض مزوّدي هوية LDAP (على سبيل المثال، <https://goauthentik.io/>)، قد تحدث حالات فشل في تسجيل الدخول. لذلك، إن أمكن، يُنصح باستخدام طريقة OAuth/SAML السابقة.
{% endhint %}

### ما هو LDAP

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

<figure><img src="/files/87447fcd1d14e63ec9a86d099077356eecb478d8" alt=""><figcaption><p>مثال على Server Pro لـ LDAP</p></figcaption></figure>

### الإعدادات

داخليًا، يستخدم Overleaf LDAP [passport-ldapauth](https://github.com/vesse/passport-ldapauth) مكتبة. تمرَّر معظم خيارات التهيئة هذه إلى `الخادم` كائن config الذي يُستخدم لتهيئة `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، يُدخل المستخدم `اسم المستخدم` و `كلمة المرور` في نموذج تسجيل الدخول، تتم المحاولة:

1. يتم البحث عن مستخدم LDAP في دليل LDAP باستخدام عامل التصفية المحدد بواسطة `OVERLEAF_LDAP_SEARCH_FILTER` ويتم التحقق من صحته.
2. إذا نجحت المصادقة، يتم التحقق من قاعدة بيانات مستخدمي Overleaf بحثًا عن مستخدم يطابق عنوان البريد الإلكتروني الأساسي للمستخدم LDAP الذي تمت مصادقته:
   * إذا وُجد مستخدم مطابق، فسيتم `hashedPassword` حذف الحقل لهذا المستخدم (إذا كان موجودًا). يضمن ذلك أن المستخدم لن يتمكن لاحقًا من تسجيل الدخول إلا عبر مصادقة LDAP.
   * إذا لم يتم العثور على مستخدم مطابق، فسيتم إنشاء مستخدم Overleaf جديد باستخدام البريد الإلكتروني والاسم الأول واسم العائلة المستخرجة من خادم LDAP.

{% hint style="danger" %}
بالنسبة للمستخدمين الذين يسجلون الدخول عبر LDAP، لا نقوم بتخزين (أو إزالة إن كانت موجودة) كلمات المرور المُجزأة في قاعدة بيانات Mongo الخاصة بـ Overleaf.
{% endhint %}

#### متغيرات البيئة

* `OVERLEAF_LDAP_URL` **(مطلوب)**
  * عنوان URL لخادم LDAP.
    * مثال: `ldaps://ldap.example.com:636` (LDAP عبر SSL)
    * مثال: `ldap://ldap.example.com:389` (غير مشفّر أو STARTTLS، إذا تم تكوينه).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * اسم العرض لخدمة هوية LDAP، ويُستخدم في صفحة تسجيل الدخول.
  * الافتراضي هو `تسجيل الدخول باستخدام موفر LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * سمة البريد الإلكتروني التي يُرجعها خادم LDAP، الافتراضي `mail`. يجب أن يكون لكل مستخدم LDAP عنوان بريد إلكتروني واحد على الأقل. إذا تم توفير عدة عناوين، فسيتم استخدام الأول فقط.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * اسم الخاصية التي تحتوي على الاسم الأول للمستخدم والمستخدمة في التطبيق، وعادةً ما تكون `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * اسم الخاصية التي تحتوي على اسم عائلة المستخدم والمستخدمة في التطبيق، وعادةً ما تكون `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * اسم الخاصية التي تحتوي على الاسم الكامل للمستخدم، وعادةً ما تكون `cn`. إذا لم يكن أيٌّ من المتغيرين السابقين معرّفًا، فسيتم استخراج الاسم الأول و/أو اسم العائلة للمستخدم من هذا المتغير. وإلا فلن يُستخدم.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * العنصر النائب لنموذج تسجيل الدخول، والقيمة الافتراضية هي `اسم المستخدم`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * إذا تم ضبطه على `true`، يتم تحديث `first_name` و `last_name` الحقل عند تسجيل الدخول، وإيقاف نموذج تفاصيل المستخدم في صفحة `/user/settings` لمستخدمي LDAP. وإلا فسيتم جلب التفاصيل فقط عند أول تسجيل دخول.
* `OVERLEAF_LDAP_BIND_DN`
  * الاسم المميز لمستخدم LDAP الذي يجب استخدامه لاتصال LDAP (يجب أن يكون هذا المستخدم قادرًا على البحث/سرد الحسابات على خادم LDAP)، مثل `cn=ldap_reader,dc=example,dc=com`. إذا لم يُعرَّف، فسيُستخدم الربط المجهول.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * كلمة المرور الخاصة بـ `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * خاصية المستخدم التي يتم الربط بها مع العميل، والقيمة الافتراضية هي `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(مطلوب)**
  * الاسم المميز الأساسي DN الذي سيتم بدء البحث عن المستخدمين منه. مثلًا، `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * عامل تصفية بحث LDAP الذي يُستخدم للعثور على مستخدم. استخدم النص الحرفي '{{username}}' لإدراج اسم المستخدم المعطى داخل بحث LDAP.
    * مثال: `(|(uid={{username}})(mail={{username}}))` (يمكن للمستخدم تسجيل الدخول عبر البريد الإلكتروني أو اسم تسجيل الدخول).
    * مثال: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * يمكن أن يكون نطاق البحث `base`, `مستوى واحد`، أو `sub` (الافتراضي).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * مصفوفة JSON من السمات المراد جلبها من خادم LDAP، مثل: `["uid", "mail", "givenName", "sn"]`. افتراضيًا، يتم جلب جميع السمات.
* `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"]`
* `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.

تُستخدم المتغيرات الخمسة التالية لتهيئة كيفية استرجاع جهات اتصال المستخدم من خادم LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * عامل التصفية المستخدم للبحث عن المستخدمين في خادم LDAP ليتم تحميلهم إلى جهات الاتصال. يُستبدل العنصر النائب '{{userProperty}}' داخل عامل التصفية بقيمة الخاصية المحددة بواسطة `OVERLEAF_LDAP_CONTACTS_PROPERTY` من مستخدم LDAP الذي بدأ البحث. إذا لم يُعرّف، فلن يتم استرجاع أي مستخدمين من خادم LDAP إلى جهات الاتصال.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * يحدد الاسم المميز الأساسي DN الذي يبدأ منه البحث عن جهات الاتصال. الافتراضي هو `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * يمكن أن يكون نطاق البحث `base`, `مستوى واحد`، أو `sub` (الافتراضي).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * يحدد الخاصية في كائن المستخدم التي ستستبدل العنصر النائب '{{userProperty}}' في `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * يحدد قيمة `OVERLEAF_LDAP_CONTACTS_PROPERTY` إذا كان البحث قد بدأ بواسطة مستخدم غير LDAP. إذا لم يُعرّف هذا المتغير، فلن يطابق عامل التصفية الناتج أي شيء. يمكن استخدام القيمة `*` كحرف بدل.

<details>

<summary><strong>مثال</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

يؤدي المثال أعلاه إلى تحميل جميع مستخدمي LDAP الذين لديهم نفس UNIX gid إلى جهات اتصال مستخدم LDAP الحالي. `gid`. سيحصل المستخدمون غير المنتمين إلى LDAP على جميع مستخدمي LDAP ذوي UNIX `gid=1000` في جهات اتصالهم.

</details>

<details>

<summary><strong>ملف variables.env نموذجي</strong></summary>

```
OVERLEAF_APP_NAME="مثيل أوفرليف الخاص بنا"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# يفعّل إنشاء الصور المصغّرة باستخدام ImageMagick
ENABLE_CONVERSIONS=true

# يعطّل متطلب تأكيد البريد الإلكتروني
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## اضبطه لـ TLS عبر nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=مثيل Overleaf الخاص بنا
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "تواصل مع فريق الدعم الخاص بك", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"مرحبًا، أنا على اليمين", "url":"https://github.com/yu-i-i/overleaf-cep"}]

OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
OVERLEAF_EMAIL_SMTP_PORT=587
OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
OVERLEAF_EMAIL_SMTP_LOGGER=false
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
OVERLEAF_CUSTOM_EMAIL_FOOTER=يُدار هذا النظام بواسطة القسم x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP لـ CE ##
#################

EXTERNAL_AUTH=ldap
OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
OVERLEAF_LDAP_STARTTLS=true
OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
OVERLEAF_LDAP_EMAIL_ATT=mail
OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
OVERLEAF_LDAP_LAST_NAME_ATT=sn
# OVERLEAF_LDAP_NAME_ATT=cn
OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

OVERLEAF_LDAP_PLACEHOLDER='اسم المستخدم أو عنوان البريد الإلكتروني'

OVERLEAF_LDAP_IS_ADMIN_ATT=mail
OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/ar/aliadadat/overleaf-toolkit/authentication/ldap-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
