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

# Autenticazione SAML

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 SAML di Overleaf utilizza [passport-saml](https://github.com/node-saml/passport-saml) la libreria, gran parte delle seguenti opzioni di configurazione vengono passate a `passport-saml`. Se hai problemi a configurare SAML, vale la pena leggere il README di `passport-saml` per farti un'idea della configurazione che si aspetta.

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

Ad esempio: `EXTERNAL_AUTH=ldap saml`

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

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

Il `externalUserId` deve corrispondere al valore della proprietà specificata da `userIdAttribute` nel profilo utente restituito dal server IdP.

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 tale utente, il `hashedPassword` il campo viene eliminato per disabilitare l'autenticazione locale, e il `samlIdentifiers` campo viene aggiunto.
* Se non viene trovato alcun utente corrispondente, viene creato un nuovo utente con l'indirizzo email e `samlIdentifiers` dal profilo IdP.

**Nota:** Attualmente è supportato solo un IdP SAML. Il `providerId` campo in `samlIdentifiers` è impostato a `'1'`.

#### Variabili d'ambiente

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Nome visualizzato per il servizio di identità, usato nella pagina di accesso (predefinito: `Accedi con SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Il valore di questo attributo sarà usato da Overleaf come ID utente esterno, predefinito a `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Nome del campo Email nel profilo utente, il valore predefinito è `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Nome del campo firstName nel profilo utente, il valore predefinito è `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Nome del campo lastName nel profilo utente, il valore predefinito è `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se impostato su `true`, aggiorna il campo utente `first_name` e `last_name` campo al momento dell'accesso, e disattiva il modulo dei dettagli utente su `/user/settings` .
* `OVERLEAF_SAML_ENTRYPOINT` **(obbligatorio)**
  * URL di accesso per il servizio di identità SAML.
    * Esempio: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Esempio Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(obbligatorio)**
  * Il nome dell'emittente.
* `OVERLEAF_SAML_AUDIENCE`
  * Audience attesa della risposta SAML, valore predefinito: `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(obbligatorio)**
  * Percorso di un file contenente il certificato pubblico del Provider di Identità, usato per convalidare le firme delle risposte SAML in ingresso. Se il Provider di Identità ha più certificati di firma validi, può essere un array JSON di percorsi ai certificati.
    * Esempio (un certificato): `/var/lib/overleaf/certs/idp_cert.pem`
    * Esempio (più certificati): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Percorso di un file contenente il certificato pubblico di firma utilizzato da incorporare nelle richieste di autenticazione in modo che l'IdP possa validare le firme della richiesta SAML in ingresso. È richiesto quando si configura il [endpoint dei metadati](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) quando la strategia è configurata con un `OVERLEAF_SAML_PRIVATE_KEY`. È possibile fornire un array JSON di percorsi ai certificati per supportare la rotazione dei certificati. Quando si fornisce un array di certificati, la prima voce dell'array deve corrispondere all'attuale `OVERLEAF_SAML_PRIVATE_KEY`. Le voci aggiuntive nell'array possono essere usate per pubblicare i certificati futuri agli IdP prima di modificare il `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Percorso di un file contenente una chiave privata in formato PEM che corrisponde al `OVERLEAF_SAML_PUBLIC_CERT` usata per firmare le richieste di autenticazione inviate da passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Percorso di un file contenente il certificato pubblico, usato per il [endpoint dei metadati](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Percorso di un file contenente la chiave privata che corrisponde al `OVERLEAF_SAML_DECRYPTION_CERT` che verrà usata per tentare di decifrare eventuali asserzioni cifrate ricevute.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Imposta opzionalmente l'algoritmo di firma per firmare le richieste, i valori validi sono 'sha1' (predefinito), 'sha256' (preferito), 'sha512' (più sicuro, verifica se il tuo IdP lo supporta).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Dizionario JSON di parametri di query aggiuntivi da aggiungere a tutte le richieste.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Dizionario JSON di parametri di query aggiuntivi da aggiungere alle richieste 'authorize'.
    * Esempio: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Formato dell'identificatore del nome da richiedere al provider di identità (predefinito: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Se si usa `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, assicurarsi che la `OVERLEAF_SAML_EMAIL_FIELD` variabile d'ambiente sia definita. Se `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` è richiesto, è inoltre necessario definire la `OVERLEAF_SAML_ID_FIELD` variabile d'ambiente, che può, ad esempio, essere impostata con l'indirizzo email dell'utente.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Tempo in millisecondi di scostamento accettabile tra client e server quando si verificano i timestamp di validità delle condizioni OnBefore e NotOnOrAfter delle asserzioni. Impostando a -1 si disabilita completamente il controllo di queste condizioni. Il valore predefinito è 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attributo da aggiungere a AuthnRequest per indicare all'IdP quale insieme di attributi associare alla risposta ([collegamento](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Array JSON di valori del formato dell'identificatore del nome da richiedere come contesto di autenticazione. Predefinito: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Se `true`, la richiesta SAML iniziale dal service provider specifica che l'IdP dovrebbe forzare una nuova autenticazione dell'utente, anche se possiede una sessione valida.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Se `true`, non richiedere un contesto di autenticazione specifico. Ad esempio, puoi impostarlo su `true` per consentire contesti aggiuntivi come accessi senza password (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Il supporto per contesti aggiuntivi dipende dal tuo IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Se impostato su `HTTP-POST`, richiederà l'autenticazione dall'IdP tramite binding HTTP POST, altrimenti il valore predefinito è HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Se `always`, allora InResponseTo verrà convalidato nelle risposte SAML in ingresso.
  * Se `mai`, allora InResponseTo non verrà convalidato (predefinito).
  * Se `ifPresent`, allora InResponseTo verrà convalidato solo se presente nella risposta SAML in ingresso.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` e `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Se impostato su `true` (predefinito), Overleaf si aspetta che le asserzioni SAML, rispettivamente l'intera risposta di autenticazione SAML, siano firmate dall'IdP. Quando entrambe le opzioni sono `false`, almeno una delle asserzioni o della risposta deve essere firmata.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definisce il tempo di scadenza dopo il quale un Request ID generato per una richiesta SAML non sarà valido se visto in una risposta SAML nel campo `InResponseTo` Campo. Predefinito: 28800000 (8 ore).
* `OVERLEAF_SAML_LOGOUT_URL`
  * indirizzo base da chiamare con richieste di logout (predefinito: `entryPoint`).
    * Esempio: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Dizionario JSON di parametri di query aggiuntivi da aggiungere alle richieste 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` e `OVERLEAF_SAML_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'IdP SAML contiene l'attributo specificato da `OVERLEAF_SAML_IS_ADMIN_FIELD` e il suo valore corrisponde a `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` oppure è un array contenente `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, altrimenti `user.isAdmin` viene impostato a `false`. Se una di queste variabili non è impostata, allora lo stato di amministratore viene impostato solo a `true` durante la creazione dell'utente amministratore in Launchpad.

**Metadati per il Provider di Identità**

La versione attuale di Overleaf CE include un endpoint per recuperare i metadati del Service Provider: `http://my-overleaf-instance.com/saml/meta`

Il Provider di Identità dovrà essere configurato per riconoscere il server Overleaf come "Service Provider". Consulta la documentazione del tuo server SAML per le istruzioni su come farlo.

Di seguito un esempio di metadati appropriati del Service Provider:

<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...
[saltato]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[saltato]
</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>

Si notino i certificati, `AssertionConsumerService.Location`, `SingleLogoutService.Location` e `EntityDescriptor.entityID` e impostali in modo appropriato nella configurazione del tuo IdP, oppure invia il file dei metadati all'amministratore dell'IdP.

<details>

<summary><strong>File variables.env di esempio (minimo)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Abilita la generazione delle miniature usando ImageMagick
ENABLE_CONVERSIONS=true

# Disabilita il requisito di conferma dell'email
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Imposta 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 sulla destra", "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

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Log in with SAML Provider'
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/it/configurazione/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.
