> 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/it/configurazione/overleaf-toolkit/authentication/oidc-authentication.md).

# Autenticazione OIDC

Questa funzionalità è sviluppata da [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Qui offriamo alcuni documenti per la tua configurazione.

### Configurazione

Internamente, il modulo OIDC di Overleaf utilizza la [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) libreria. Se hai problemi a configurare OpenID Connect, vale la pena leggere il README di `passport-openidconnect` per farsi un'idea della configurazione che si aspetta.

La variabile d'ambiente `EXTERNAL_AUTH` è richiesto per abilitare il modulo di autenticazione OIDC. Questa variabile d'ambiente specifica quali metodi di autenticazione esterni sono attivati. Il valore di questa variabile è un elenco. Se l'elenco include `oidc` allora l'autenticazione OIDC sarà attivata.

Ad esempio: `EXTERNAL_AUTH=ldap oidc`

Quando si utilizza il metodo di autenticazione OIDC, un utente viene reindirizzato al sito di autenticazione dell'Identity Provider (IdP). Se l'IdP autentica con successo l'utente, nel database degli utenti di Overleaf viene cercato un record contenente un `thirdPartyIdentifiers` campo strutturato come segue:

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

Il `externalUserId` deve corrispondere all'ID utente nel profilo restituito dal server IdP (vedi la `OVERLEAF_OIDC_USER_ID_FIELD` variabile d'ambiente), e `providerId` deve corrispondere all'ID del provider OIDC (vedi la `OVERLEAF_OIDC_PROVIDER_ID`).

Se non viene trovato alcun record corrispondente, nel database viene cercato un utente con l'indirizzo email principale corrispondente all'email nel profilo utente IdP:

* Se viene trovato un utente del genere, il `thirdPartyIdentifiers` campo viene aggiornato.
* Se non viene trovato alcun utente corrispondente e la creazione dell'account JIT non è disabilitata, viene creato un nuovo utente con l'indirizzo email e il `thirdPartyIdentifiers` dal profilo IdP.

In entrambi i casi, si dice che l'utente è 'collegato' all'utente OIDC esterno. L'utente può essere scollegato dal provider OIDC nella `/user/settings` pagina.

#### Variabili d'ambiente

I valori delle seguenti cinque variabili obbligatorie possono essere trovati usando `.well-known/openid-configuration` endpoint del tuo OpenID Provider (OP).

* `OVERLEAF_OIDC_ISSUER` **(richiesto)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(richiesto)**
* `OVERLEAF_OIDC_TOKEN_URL` **(richiesto)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(richiesto)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(richiesto)**

I valori delle seguenti due variabili obbligatorie saranno forniti dall'amministratore del tuo OP

* `OVERLEAF_OIDC_CLIENT_ID` **(richiesto)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(richiesto)**
* `OVERLEAF_OIDC_SCOPE`
  * Predefinito: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * ID arbitrario dell'OP, predefinito a `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Il nome dell'OP, usato nella `Account collegati` sezione del `/user/settings` pagina, predefinito a `Provider OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nome visualizzato per il servizio di identità, usato nella pagina di accesso (predefinito: `Accedi con $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Descrizione dell'OP, usata nella `Account collegati` sezione (predefinito: `Accedi con $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Scopri di più` URL nella descrizione dell'OP, predefinito: nessun `Scopri di più` link nella descrizione.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Non mostrare l'OP nella `/user/settings` pagina, se l'account dell'utente non è collegato all'OP, predefinito `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Il valore di questo attributo sarà usato da Overleaf come ID utente esterno, predefinito a `id`. Altri possibili valori ragionevoli sono `email` e `nome utente` (corrispondente a `preferred_username` claim OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Limita la creazione dell'account Just-in-Time (JIT) per gli utenti che si autenticano tramite OIDC. Se impostata a un elenco di nomi di dominio separati da virgole, un nuovo account verrà creato solo se il dominio dell'indirizzo email dell'utente corrisponde a uno dei domini elencati. Se il dominio non corrisponde, un amministratore deve creare manualmente l'account utente usando l'indirizzo email dell'utente OIDC, con una password casuale robusta o, preferibilmente, senza il `hashedPassword` campo affatto. I nomi di dominio possono includere un `*.` carattere jolly iniziale per corrispondere ai sottodomini.
    * Esempio: per consentire la creazione dell'account JIT per utenti con indirizzi email come `name@example.com` e `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Esempio: per disabilitare completamente la creazione dell'account JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se impostato su `true`, aggiorna il `first_name` e `last_name` campo dell'utente al login e disabilita il modulo dei dettagli utente su `/user/settings` pagina.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` e `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Quando entrambe le variabili d'ambiente sono impostate, il processo di accesso aggiorna `user.isAdmin = true` se il profilo restituito dall'OP contiene l'attributo specificato da `OVERLEAF_OIDC_IS_ADMIN_FIELD` e il suo valore corrisponde a `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, altrimenti `user.isAdmin` è impostato a `false`. Se `OVERLEAF_OIDC_IS_ADMIN_FIELD` è `email` allora il valore dell'attributo `emails[0].value` viene usato per il controllo della corrispondenza.

L'URL di reindirizzamento per il tuo OpenID Provider è `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>File variables.env di esempio</summary>

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

```dotenv
OVERLEAF_APP_NAME="La nostra istanza Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Consente la generazione delle miniature usando ImageMagick
ENABLE_CONVERSIONS=true

# Disabilita il requisito di conferma email
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Impostato per TLS tramite nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=La nostra istanza Overleaf
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Contatta il tuo team di supporto", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Ciao, sono sul lato destro", "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=Questo sistema è gestito dal dipartimento x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## OIDC per 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='Accedi con il provider OIDC Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=Provider 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://ayakaleaf-pro.ayaka.space/on-premises/it/configurazione/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.
