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

# Πιστοποίηση SAML

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

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

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

Η μεταβλητή περιβάλλοντος `EXTERNAL_AUTH` απαιτείται για να ενεργοποιηθεί το module ελέγχου ταυτότητας 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` **(απαιτείται)**
  * Το όνομα του εκδότη.
* `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 Request. Απαιτείται κατά τη ρύθμιση του [τελικού σημείου μεταδεδομένων](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`. Επιπλέον καταχωρήσεις στον πίνακα μπορούν να χρησιμοποιηθούν για να δημοσιεύονται επερχόμενα πιστοποιητικά σε IdPs πριν αλλάξει το `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` το οποίο θα χρησιμοποιηθεί για να επιχειρηθεί η αποκρυπτογράφηση οποιωνδήποτε κρυπτογραφημένων δηλώσεων που λαμβάνονται.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Προαιρετικά ορίστε τον αλγόριθμο υπογραφής για την υπογραφή αιτημάτων, έγκυρες τιμές είναι 'sha1' (προεπιλογή), 'sha256' (προτιμώμενο), 'sha512' (το πιο ασφαλές, ελέγξτε αν το υποστηρίζει ο IdP σας).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Λεξικό JSON πρόσθετων παραμέτρων query για προσθήκη σε όλα τα αιτήματα.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Λεξικό JSON πρόσθετων παραμέτρων query για προσθήκη στα αιτήματα '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`
  * Χρόνος σε χιλιοστά του δευτερολέπτου της απόκλισης που είναι αποδεκτός μεταξύ πελάτη και διακομιστή κατά τον έλεγχο των χρονικών σφραγίδων εγκυρότητας των συνθηκών δήλωσης 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 τιμών μορφής αναγνωριστικού ονόματος για αίτηση auth context. Προεπιλογή: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Αν `true`, το αρχικό αίτημα SAML από τον πάροχο υπηρεσιών καθορίζει ότι ο IdP πρέπει να επιβάλει επανεπαλήθευση ταυτότητας του χρήστη, ακόμη και αν διαθέτει έγκυρη συνεδρία.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Αν `true`, μην ζητάτε συγκεκριμένο auth context. Για παράδειγμα, μπορείτε να το ορίσετε σε `true` για να επιτρέψετε πρόσθετα contexts, όπως συνδέσεις χωρίς κωδικό πρόσβασης (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Η υποστήριξη για πρόσθετα contexts εξαρτάται από τον 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, αντίστοιχα ολόκληρη η απάντηση ελέγχου ταυτότητας SAML, να είναι υπογεγραμμένες από τον IdP. Όταν και οι δύο επιλογές είναι `false`, τότε πρέπει να είναι υπογεγραμμένη τουλάχιστον μία από τις δηλώσεις ή η απάντηση.
* `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 πρόσθετων παραμέτρων query για προσθήκη στα αιτήματα '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...
[παραλείφθηκε]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[παραλείφθηκε]
</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="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

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