> 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/saml-authentication.md).

# Ταυτοποίηση SAML

Αυτό το χαρακτηριστικό αναπτύχθηκε από [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Εδώ προσφέρουμε ορισμένα έγγραφα για τη διαμόρφωσή σας.

### Ρύθμιση

Εσωτερικά, η μονάδα SAML του Overleaf χρησιμοποιεί τη [passport-saml](https://github.com/node-saml/passport-saml) βιβλιοθήκη, οι περισσότερες από τις ακόλουθες επιλογές ρύθμισης μεταβιβάζονται στο `passport-saml`. Αν αντιμετωπίζετε προβλήματα με τη διαμόρφωση του SAML, αξίζει να διαβάσετε το README του `passport-saml` για να αποκτήσετε μια αίσθηση της διαμόρφωσης που αναμένει.

Η μεταβλητή περιβάλλοντος `EXTERNAL_AUTH` απαιτείται για την ενεργοποίηση της μονάδας ελέγχου ταυτότητας SAML. Αυτή η μεταβλητή περιβάλλοντος καθορίζει ποιες εξωτερικές μέθοδοι ελέγχου ταυτότητας είναι ενεργοποιημένες. Η τιμή αυτής της μεταβλητής είναι μια λίστα. Αν η λίστα περιλαμβάνει `saml` τότε θα ενεργοποιηθεί ο έλεγχος ταυτότητας SAML.

Για παράδειγμα: `EXTERNAL_AUTH=ldap saml`

Όταν χρησιμοποιείτε τη μέθοδο ελέγχου ταυτότητας SAML, ο χρήστης ανακατευθύνεται στον ιστότοπο ελέγχου ταυτότητας του Παρόχου Ταυτότητας (IdP). Αν ο IdP επαληθεύσει επιτυχώς τον χρήστη, γίνεται έλεγχος στη βάση δεδομένων χρηστών του Overleaf για μια εγγραφή που περιέχει ένα `samlIdentifiers` πεδίο με την ακόλουθη δομή:

```json
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

Το `externalUserId` πρέπει να ταιριάζει με την τιμή της ιδιότητας που καθορίζεται από το `userIdAttribute` στο προφίλ χρήστη που επιστρέφεται από τον διακομιστή IdP.

Αν δεν βρεθεί αντίστοιχη εγγραφή, η βάση δεδομένων αναζητά χρήστη με την κύρια διεύθυνση email που αντιστοιχεί στο email στο προφίλ χρήστη του IdP:

* Αν βρεθεί τέτοιος χρήστης, το `hashedPassword` το πεδίο διαγράφεται για να απενεργοποιηθεί ο τοπικός έλεγχος ταυτότητας, και το `samlIdentifiers` πεδίο προστίθεται.
* Αν δεν βρεθεί αντίστοιχος χρήστης, δημιουργείται νέος χρήστης με τη διεύθυνση email και `samlIdentifiers` από το προφίλ του IdP.

**Σημείωση:** Προς το παρόν, υποστηρίζεται μόνο ένα SAML IdP. Το `providerId` πεδίο στο `samlIdentifiers` ορίζεται σε `'1'`.

#### Μεταβλητές Περιβάλλοντος

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Εμφανιζόμενο όνομα για την υπηρεσία ταυτότητας, χρησιμοποιείται στη σελίδα σύνδεσης (προεπιλογή: `Σύνδεση με SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Η τιμή αυτού του χαρακτηριστικού θα χρησιμοποιηθεί από το Overleaf ως το εξωτερικό αναγνωριστικό χρήστη, προεπιλογή: `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Το όνομα του πεδίου Email στο προφίλ χρήστη, η προεπιλογή είναι `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Το όνομα του πεδίου firstName στο προφίλ χρήστη, η προεπιλογή είναι `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Το όνομα του πεδίου lastName στο προφίλ χρήστη, η προεπιλογή είναι `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Αν οριστεί σε `true`, ενημερώνει το `first_name` και `last_name` πεδίο κατά τη σύνδεση και απενεργοποιήστε τη φόρμα στοιχείων χρήστη στο `/user/settings` σελίδα.
* `OVERLEAF_SAML_ENTRYPOINT` **(απαιτείται)**
  * URL εισόδου για την υπηρεσία ταυτότητας SAML.
    * Παράδειγμα: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Παράδειγμα Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(απαιτείται)**
  * Το όνομα του Issuer.
* `OVERLEAF_SAML_AUDIENCE`
  * Αναμενόμενο Audience της απάντησης SAML, η προεπιλογή είναι η τιμή του `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(απαιτείται)**
  * Διαδρομή προς ένα αρχείο που περιέχει το δημόσιο πιστοποιητικό του Παρόχου Ταυτότητας, το οποίο χρησιμοποιείται για την επικύρωση των υπογραφών των εισερχόμενων απαντήσεων SAML. Αν ο Παρόχος Ταυτότητας έχει πολλαπλά έγκυρα πιστοποιητικά υπογραφής, τότε μπορεί να είναι ένας πίνακας JSON με διαδρομές προς τα πιστοποιητικά.
    * Παράδειγμα (ένα πιστοποιητικό): `/var/lib/overleaf/certs/idp_cert.pem`
    * Παράδειγμα (πολλά πιστοποιητικά): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Διαδρομή προς ένα αρχείο που περιέχει δημόσιο πιστοποιητικό υπογραφής, το οποίο χρησιμοποιείται για την ενσωμάτωση στα αιτήματα ελέγχου ταυτότητας ώστε ο IdP να επικυρώνει τις υπογραφές του εισερχόμενου αιτήματος SAML. Απαιτείται κατά τη ρύθμιση του [τελικού σημείου μεταδεδομένων](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) όταν η στρατηγική έχει ρυθμιστεί με ένα `OVERLEAF_SAML_PRIVATE_KEY`. Μπορεί να δοθεί ένας πίνακας JSON από διαδρομές προς πιστοποιητικά για να υποστηριχθεί η εναλλαγή πιστοποιητικών. Όταν παρέχετε έναν πίνακα πιστοποιητικών, η πρώτη καταχώριση στον πίνακα πρέπει να ταιριάζει με το τρέχον `OVERLEAF_SAML_PRIVATE_KEY`. Πρόσθετες καταχωρίσεις στον πίνακα μπορούν να χρησιμοποιηθούν για τη δημοσίευση επερχόμενων πιστοποιητικών προς τους IdP πριν αλλάξει το `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Διαδρομή προς ένα αρχείο που περιέχει ένα ιδιωτικό κλειδί μορφής PEM που αντιστοιχεί στο `OVERLEAF_SAML_PUBLIC_CERT` που χρησιμοποιείται για την υπογραφή αιτημάτων ελέγχου ταυτότητας που αποστέλλονται από το passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Διαδρομή προς ένα αρχείο που περιέχει δημόσιο πιστοποιητικό, που χρησιμοποιείται για το [τελικού σημείου μεταδεδομένων](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Διαδρομή προς ένα αρχείο που περιέχει ιδιωτικό κλειδί που αντιστοιχεί στο `OVERLEAF_SAML_DECRYPTION_CERT` το οποίο θα χρησιμοποιηθεί για να επιχειρηθεί η αποκρυπτογράφηση οποιωνδήποτε κρυπτογραφημένων assertions που λαμβάνονται.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Προαιρετικά ορίστε τον αλγόριθμο υπογραφής για την υπογραφή αιτημάτων· οι έγκυρες τιμές είναι 'sha1' (προεπιλογή), 'sha256' (προτιμώμενο), 'sha512' (πιο ασφαλές, ελέγξτε αν το IdP σας το υποστηρίζει).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Λεξικό JSON πρόσθετων παραμέτρων ερωτήματος για προσθήκη σε όλα τα αιτήματα.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Λεξικό JSON πρόσθετων παραμέτρων ερωτήματος για προσθήκη σε αιτήματα 'authorize'.
    * Παράδειγμα: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Μορφή αναγνωριστικού ονόματος που θα ζητηθεί από τον πάροχο ταυτότητας (προεπιλογή: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Αν χρησιμοποιείτε `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, βεβαιωθείτε ότι η `OVERLEAF_SAML_EMAIL_FIELD` μεταβλητή περιβάλλοντος έχει οριστεί. Αν `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` απαιτείται, πρέπει επίσης να ορίσετε τη `OVERLEAF_SAML_ID_FIELD` μεταβλητή περιβάλλοντος, η οποία μπορεί, για παράδειγμα, να οριστεί στη διεύθυνση email του χρήστη.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Χρόνος σε χιλιοστά του δευτερολέπτου απόκλισης που είναι αποδεκτός μεταξύ πελάτη και διακομιστή κατά τον έλεγχο των χρονικών σφραγίδων εγκυρότητας των συνθηκών assertions OnBefore και NotOnOrAfter. Η ρύθμιση σε -1 θα απενεργοποιήσει εντελώς τον έλεγχο αυτών των συνθηκών. Η προεπιλογή είναι 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` ιδιότητα που θα προστεθεί στο AuthnRequest για να υποδείξει στον IdP ποιο σύνολο ιδιοτήτων να επισυνάψει στην απάντηση ([σύνδεσμος](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Πίνακας JSON με τιμές μορφής αναγνωριστικού ονόματος για αίτηση πλαισίου ελέγχου ταυτότητας. Προεπιλογή: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Εάν `true`, το αρχικό αίτημα SAML από τον πάροχο υπηρεσιών καθορίζει ότι ο IdP πρέπει να επιβάλει επανεξακρίβωση ταυτότητας του χρήστη, ακόμη και αν διαθέτει έγκυρη συνεδρία.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Εάν `true`, μην ζητάτε συγκεκριμένο πλαίσιο ελέγχου ταυτότητας. Για παράδειγμα, μπορείτε να το ορίσετε αυτό σε `true` για να επιτρέψετε πρόσθετα περιβάλλοντα, όπως συνδέσεις χωρίς κωδικό (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Η υποστήριξη για πρόσθετα περιβάλλοντα εξαρτάται από το IdP σας.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Αν οριστεί σε `HTTP-POST`, θα ζητήσει έλεγχο ταυτότητας από τον IdP μέσω δέσμευσης HTTP POST, διαφορετικά η προεπιλογή είναι HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Εάν `always`, τότε το InResponseTo θα επικυρώνεται από τις εισερχόμενες απαντήσεις SAML.
  * Εάν `ποτέ`, τότε το InResponseTo δεν θα επικυρώνεται (προεπιλογή).
  * Εάν `ifPresent`, τότε το InResponseTo θα επικυρώνεται μόνο αν υπάρχει στην εισερχόμενη απάντηση SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` και `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Όταν οριστεί σε `true` (προεπιλογή), το Overleaf αναμένει οι SAML Assertions, αντίστοιχα ολόκληρη η απάντηση ελέγχου ταυτότητας SAML, να είναι υπογεγραμμένες από τον IdP. Όταν και οι δύο επιλογές είναι `false`, τουλάχιστον μία από τις assertions ή η απάντηση πρέπει να είναι υπογεγραμμένη.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Καθορίζει τον χρόνο λήξης κατά τον οποίο ένα Request ID που δημιουργήθηκε για αίτημα SAML δεν θα είναι έγκυρο αν εμφανιστεί σε απάντηση SAML στο `InResponseTo` πεδίο. Προεπιλογή: 28800000 (8 ώρες).
* `OVERLEAF_SAML_LOGOUT_URL`
  * βασική διεύθυνση για κλήση με αιτήματα αποσύνδεσης (προεπιλογή: `entryPoint`).
    * Παράδειγμα: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Λεξικό JSON πρόσθετων παραμέτρων ερωτήματος για προσθήκη σε αιτήματα 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` και `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Όταν οριστούν και οι δύο μεταβλητές περιβάλλοντος, η διαδικασία σύνδεσης ενημερώνει `user.isAdmin = true` αν το προφίλ που επιστρέφεται από το SAML IdP περιέχει το χαρακτηριστικό που καθορίζεται από το `OVERLEAF_SAML_IS_ADMIN_FIELD` και η τιμή του είτε αντιστοιχεί στο `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` ή είναι ένας πίνακας που περιέχει `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, διαφορετικά `user.isAdmin` ορίζεται σε `false`. Αν δεν έχει οριστεί κάποια από αυτές τις μεταβλητές, τότε η κατάσταση διαχειριστή ορίζεται μόνο σε `true` κατά τη δημιουργία διαχειριστή στο Launchpad.

**Μεταδεδομένα για τον Παρόχο Ταυτότητας**

Η τρέχουσα έκδοση του Overleaf CE περιλαμβάνει ένα τελικό σημείο για ανάκτηση μεταδεδομένων Παρόχου Υπηρεσιών: `http://my-overleaf-instance.com/saml/meta`

Ο Παρόχος Ταυτότητας θα πρέπει να ρυθμιστεί ώστε να αναγνωρίζει τον διακομιστή Overleaf ως «Πάροχο Υπηρεσιών». Συμβουλευτείτε την τεκμηρίωση του διακομιστή SAML σας για οδηγίες σχετικά με τον τρόπο να το κάνετε αυτό.

Παρακάτω είναι ένα παράδειγμα κατάλληλων μεταδεδομένων Παρόχου Υπηρεσιών:

<details>

<summary><strong>ol-meta.xml</strong></summary>

```
<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  entityID="MyOverleaf"
                  ID="_b508c83b7dda452f5b269383fb391107116f8f57">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                         Location="https://my-overleaf-instance.com/saml/logout/callback"/>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
    <AssertionConsumerService index="1"
                              isDefault="true"
                              Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                              Location="https://my-overleaf-instance.com/saml/login/callback"/>
  </SPSSODescriptor>
</EntityDescriptor>

```

</details>

Σημειώστε τα πιστοποιητικά, `AssertionConsumerService.Location`, `SingleLogoutService.Location` και `EntityDescriptor.entityID` και ρυθμίστε τα κατάλληλα στη διαμόρφωση του IdP σας, ή στείλτε το αρχείο μεταδεδομένων στον διαχειριστή του IdP.

<details>

<summary><strong>Δείγμα αρχείου variables.env (ελάχιστο)</strong></summary>

<pre><code>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

#################
##     SAML    ##
#################

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Σύνδεση με πάροχο SAML'
OVERLEAF_SAML_EMAIL_FIELD=Email
OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
<strong>OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
</strong>OVERLEAF_SAML_SIGNATURE_ALGORITHM=
</code></pre>

</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/saml-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.
