> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/el/diamorfosi/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 στο web περιβάλλον, ξεχωριστή από τη συνήθη μέθοδο πιστοποίησης. Όταν ένας χρήστης υποβάλλει το όνομα χρήστη και τον κωδικό πρόσβασής του LDAP, το backend του Overleaf επαληθεύει τα διαπιστευτήρια έναντι του ρυθμισμένου διακομιστή LDAP, για παράδειγμα `ldap://ldap:10389`.

<figure><img src="/files/4e4746a6f2321aab3419024d5cc9b7b66d6161d3" alt=""><figcaption><p>Ένα παράδειγμα Server Pro για LDAP</p></figcaption></figure>

### Ρύθμιση παραμέτρων

Εσωτερικά, το Overleaf LDAP χρησιμοποιεί τη [passport-ldapauth](https://github.com/vesse/passport-ldapauth) βιβλιοθήκη. Οι περισσότερες από αυτές τις επιλογές ρύθμισης μεταβιβάζονται στο `server` αντικείμενο 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 για χρήστη με την κύρια διεύθυνση email που ταιριάζει με τη διεύθυνση email του πιστοποιημένου χρήστη LDAP:
   * Αν βρεθεί αντίστοιχος χρήστης, το `hashedPassword` πεδίο για αυτόν τον χρήστη διαγράφεται (αν υπάρχει). Αυτό διασφαλίζει ότι ο χρήστης θα μπορεί στο μέλλον να συνδέεται μόνο μέσω πιστοποίησης LDAP.
   * Αν δεν βρεθεί αντίστοιχος χρήστης, δημιουργείται νέος χρήστης Overleaf χρησιμοποιώντας το email, το όνομα και το επώνυμο που ανακτώνται από τον διακομιστή 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`
  * Το χαρακτηριστικό email που επιστρέφεται από τον διακομιστή LDAP, προεπιλογή `mail`. Κάθε χρήστης LDAP πρέπει να έχει τουλάχιστον μία διεύθυνση email. Αν παρέχονται πολλαπλές διευθύνσεις, θα χρησιμοποιηθεί μόνο η πρώτη.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Το όνομα ιδιότητας που περιέχει το μικρό όνομα του χρήστη και χρησιμοποιείται στην εφαρμογή, συνήθως `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Το όνομα ιδιότητας που περιέχει το επώνυμο του χρήστη και χρησιμοποιείται στην εφαρμογή, συνήθως `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Το όνομα ιδιότητας που περιέχει το πλήρες όνομα του χρήστη, συνήθως `cn`. Αν κάποια από τις δύο προηγούμενες μεταβλητές δεν έχει οριστεί, το όνομα ή/και το επώνυμο του χρήστη εξάγεται από αυτήν τη μεταβλητή. Διαφορετικά, δεν χρησιμοποιείται.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Το placeholder για τη φόρμα σύνδεσης, προεπιλογή `Όνομα χρήστη`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Αν οριστεί σε `true`, ενημερώνει τον χρήστη LDAP `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}}))` (ο χρήστης μπορεί να συνδεθεί με email ή με όνομα σύνδεσης).
    * Παράδειγμα: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Το εύρος της αναζήτησης μπορεί να είναι `βάση`, `ένα`, ή `υπο` (προεπιλογή).
* `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 container.
    * Παράδειγμα (ένα πιστοποιητικό): `/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`
  * Για πόσο χρόνο πρέπει ο πελάτης να αφήνει τις λειτουργίες να εκτελούνται πριν από τη λήξη χρόνου, ms (Προεπιλογή: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Για πόσο χρόνο πρέπει ο πελάτης να περιμένει πριν από τη λήξη χρόνου στις συνδέσεις TCP, ms (Προεπιλογή: προεπιλογή του λειτουργικού συστήματος).
* `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 ώστε να φορτωθούν στις επαφές. Το placeholder '{{userProperty}}' μέσα στο φίλτρο αντικαθίσταται με την τιμή της ιδιότητας που καθορίζεται από το `OVERLEAF_LDAP_CONTACTS_PROPERTY` από τον χρήστη LDAP που ξεκινά την αναζήτηση. Αν δεν οριστεί, δεν ανακτώνται χρήστες από τον διακομιστή LDAP στις επαφές.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Καθορίζει το βασικό DN από το οποίο θα ξεκινήσει η αναζήτηση για τις επαφές. Προεπιλογή σε `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Το εύρος της αναζήτησης μπορεί να είναι `βάση`, `ένα`, ή `υπο` (προεπιλογή).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Καθορίζει την ιδιότητα του αντικειμένου χρήστη που θα αντικαταστήσει το placeholder '{{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 όλοι οι χρήστες LDAP που έχουν το ίδιο UNIX `gid`. Οι χρήστες που δεν είναι LDAP θα έχουν όλους τους χρήστες LDAP με UNIX `gid=1000` στις επαφές τους.

</details>

<details>

<summary><strong>Παράδειγμα αρχείου variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Ενεργοποιεί τη δημιουργία μικρογραφιών με το ImageMagick
ENABLE_CONVERSIONS=true

# Απενεργοποιεί την απαίτηση επιβεβαίωσης email
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='Όνομα χρήστη ή διεύθυνση email'

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://ayakaleaf-pro.ayaka.space/on-premises/el/diamorfosi/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.
