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

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

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

### Ρύθμιση

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

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

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

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

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

Το `externalUserId` πρέπει να αντιστοιχεί στο αναγνωριστικό χρήστη στο προφίλ που επιστρέφει ο διακομιστής IdP (βλ. το `OVERLEAF_OIDC_USER_ID_FIELD` μεταβλητή περιβάλλοντος), και `providerId` πρέπει να αντιστοιχεί στο αναγνωριστικό του παρόχου OIDC (βλ. το `OVERLEAF_OIDC_PROVIDER_ID`).

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

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

Και στις δύο περιπτώσεις, λέγεται ότι ο χρήστης είναι «συνδεδεμένος» με τον εξωτερικό χρήστη OIDC. Ο χρήστης μπορεί να αποσυνδεθεί από τον πάροχο OIDC στη `/user/settings` σελίδα.

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

Οι τιμές των ακόλουθων πέντε απαιτούμενων μεταβλητών μπορούν να βρεθούν χρησιμοποιώντας το `.well-known/openid-configuration` τελικό σημείο του OpenID Provider (OP) σας.

* `OVERLEAF_OIDC_ISSUER` **(απαιτείται)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(απαιτείται)**
* `OVERLEAF_OIDC_TOKEN_URL` **(απαιτείται)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(απαιτείται)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(απαιτείται)**

Οι τιμές των ακόλουθων δύο απαιτούμενων μεταβλητών θα παρασχεθούν από τον διαχειριστή του OP σας

* `OVERLEAF_OIDC_CLIENT_ID` **(απαιτείται)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(απαιτείται)**
* `OVERLEAF_OIDC_SCOPE`
  * Προεπιλογή: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * Αυθαίρετο αναγνωριστικό του OP, προεπιλογή: `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Το όνομα του OP, χρησιμοποιείται στη σελίδα `Συνδεδεμένοι Λογαριασμοί` ενότητα του `/user/settings` συνδέσεων, προεπιλογή: `Πάροχος OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Εμφανιζόμενο όνομα για την υπηρεσία ταυτότητας, χρησιμοποιείται στη σελίδα σύνδεσης (προεπιλογή: `Σύνδεση με $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Περιγραφή του OP, χρησιμοποιείται στην ενότητα `Συνδεδεμένοι Λογαριασμοί` (προεπιλογή: `Σύνδεση με $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Μάθετε περισσότερα` URL στην περιγραφή του OP, προεπιλογή: χωρίς `Μάθετε περισσότερα` σύνδεσμο στην περιγραφή.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Μην εμφανίζετε τον OP στη `/user/settings` σελίδα, εάν ο λογαριασμός του χρήστη δεν είναι συνδεδεμένος με τον OP, προεπιλογή `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Η τιμή αυτού του χαρακτηριστικού θα χρησιμοποιηθεί από το Overleaf ως το εξωτερικό αναγνωριστικό χρήστη, προεπιλογή: `id`. Άλλες πιθανές εύλογες τιμές είναι οι `email` και `όνομα χρήστη` (αντιστοιχεί στο `preferred_username` δήλωση OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Περιορίζει τη δημιουργία λογαριασμού Just-in-Time (JIT) για χρήστες που αυθεντικοποιούνται μέσω OIDC. Αν οριστεί σε μια λίστα ονομάτων τομέα διαχωρισμένων με κόμματα, ένας νέος λογαριασμός θα δημιουργηθεί μόνο αν ο τομέας της διεύθυνσης email του χρήστη ταιριάζει με έναν από τους καταγεγραμμένους τομείς. Αν ο τομέας δεν ταιριάζει, ένας διαχειριστής πρέπει να δημιουργήσει χειροκίνητα τον λογαριασμό χρήστη χρησιμοποιώντας τη διεύθυνση email του χρήστη OIDC, είτε με έναν ισχυρό τυχαίο κωδικό πρόσβασης είτε, κατά προτίμηση, χωρίς το `hashedPassword` πεδίο καθόλου. Τα ονόματα τομέα μπορεί να περιλαμβάνουν ένα αρχικό `*.` χαρακτήρα μπαλαντέρ για την αντιστοίχιση υποτομέων.
    * Παράδειγμα: Για να επιτρέψετε τη δημιουργία λογαριασμού JIT για χρήστες με διεύθυνση email όπως `name@example.com` και `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Παράδειγμα: Για να απενεργοποιήσετε πλήρως τη δημιουργία λογαριασμού JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Αν οριστεί σε `true`, ενημερώνει το `first_name` και `last_name` πεδίο του χρήστη κατά τη σύνδεση και απενεργοποιεί τη φόρμα στοιχείων χρήστη στη `/user/settings` σελίδα.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` και `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Όταν οριστούν και οι δύο μεταβλητές περιβάλλοντος, η διαδικασία σύνδεσης ενημερώνει `user.isAdmin = true` αν το προφίλ που επιστρέφει ο OP περιέχει το χαρακτηριστικό που καθορίζεται από το `OVERLEAF_OIDC_IS_ADMIN_FIELD` και η τιμή του αντιστοιχεί στο `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, διαφορετικά `user.isAdmin` ορίζεται σε `false`Αν `OVERLEAF_OIDC_IS_ADMIN_FIELD` είναι `email` τότε η τιμή του χαρακτηριστικού `emails[0].value` χρησιμοποιείται για τον έλεγχο αντιστοίχισης.

Το URL ανακατεύθυνσης για τον OpenID Provider σας είναι `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

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

{% code title="variables.env" overflow="wrap" %}

```dotenv
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

#################
## OIDC για CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Σύνδεση με τον πάροχο OIDC Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=Πάροχος OIDC Keycloak
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

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