> 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/el/rythmisi/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, το 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) βιβλιοθήκη. Οι περισσότερες από αυτές τις επιλογές διαμόρφωσης περνούν στο `διακομιστή` αντικείμενο 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`
  * Το σύμβολο κράτησης θέσης για τη φόρμα σύνδεσης, προεπιλογή `Όνομα χρήστη`.
* `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`. Αν δεν οριστεί, χρησιμοποιείται ανώνυμο binding.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Κωδικός πρόσβασης για `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Ιδιότητα του χρήστη στην οποία γίνεται bind έναντι του πελάτη, προεπιλογή `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`
  * Το εύρος της αναζήτησης μπορεί να είναι `base`, `one`, ή `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`
  * Για πόσο χρόνο θα πρέπει ο πελάτης να αφήνει τις λειτουργίες να παραμείνουν ενεργές πριν λήξουν, ms (Προεπιλογή: Άπειρο).
* `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 ώστε να φορτωθούν στις επαφές. Το σύμβολο κράτησης θέσης '{{userProperty}}' μέσα στο φίλτρο αντικαθίσταται από την τιμή της ιδιότητας που ορίζεται από το `OVERLEAF_LDAP_CONTACTS_PROPERTY` από τον χρήστη LDAP που ξεκινά την αναζήτηση. Αν δεν οριστεί, δεν ανακτώνται χρήστες από τον διακομιστή LDAP στις επαφές.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Καθορίζει το βασικό DN από το οποίο θα ξεκινήσει η αναζήτηση για τις επαφές. Προεπιλογή σε `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Το εύρος της αναζήτησης μπορεί να είναι `base`, `one`, ή `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 όλοι οι χρήστες LDAP που έχουν το ίδιο UNIX `gid`. Οι χρήστες που δεν είναι LDAP θα έχουν όλους τους χρήστες LDAP με UNIX `gid=1000` στις επαφές τους.

</details>

<details>

<summary><strong>Δείγμα αρχείου variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Η δική μας εγκατάσταση Overleaf"

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