# SAML

Authentification | Utilisateurs | Mot-de-passe
--- | --- | ---
✔ | ✔ |

## Présentation

LL::NG peut utiliser SAML2 pour obtenir l'identité et d'autres attributs definis dans le profil utilisateur défini chez son fournisseur d'identité (IDP). Dans ce cas, LL::NG agit comme un fournisseur de service SAML2 (SP).

Plusieurs IDPs peuvent être autorisés, dans ce cas l'utilisateur peut choisir l'IDP qu'il souhaite. Il est possible de pré-selectionner l'IDP par une règle de résolution.

Pour chaque IDP, il faut configurer les attributs à collecter. Certains peuvent être obligatoires, et s'ils ne sont pas retournés par l'IDP, la session n'est pas ouverte.

LL::NG can also act as SAML IDP, that allows one to interconnect two LL::NG systems.

## Configuration

### Service SAML

Voir le chapître de configuration du service SAML.

### Authentification et base d'utilisateurs

Dans `Paramètres généraux` > `Modules d'authentification`, choisir :

- Module d'authentification : SAML
- Module utilisateurs : SAML

Comme les mots-de-passe ne sernt pas gérés par LL::NG, il est possile de désactiver le module mots-de-passe du menu.

### Enregistrer LemonLDAP::NG dans le fournisseur d'identité partenaire

Après avoir configuré le service SAML Service, exporter les metadatas vers le fournisseur d'identité partenaire.

Elles sont disponibles à l'URL EntityID, par défaut : http://auth.example.com/saml/metadata.

### Enregistrer le fournisseur d'identité partenaire dans LemonLDAP::NG

Dans le Manager, selectionner le noeud `Fournisseurs d'identité SAML` et cliquer sur `Ajouter un IdP SAML` : Le nom d'IDP est demandé, entrer-le et cliquer sur OK.

#### Métadonnée

Il faut enregistrer les métadatas de l'IDP ici. Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'URL de métadatas de l'IDP (à condition d'avoir un lien réseau entre le serveur et l'IDP):

On peut aussi éditer la métadonnée directement dans le champ textarea

#### Attributs exportés

Pour chaque attribut, on peut indiquer :

- Nom de clef : nom de la clef dans la session LemonLDAP::NG (par exemple “uid” équivaut à $uid dans les règles d'accès)
- Obligatoire : si activé, les sessions ne seront ouvertes que si l'attribut est fourni par l'IDP.
- Nom: Nom de l'attribut SAML.
- Nom alternatif: optionnel, nom alternatif de l'attribut SAML.
- Format (optionnel) : format de l'attribut SAML.

#### Options

##### Options générales

- Règle de résolution : règle à appliquer pour pré-sélectionner cet IDP. Toutes les variables d'environnement sont disponibles, telle l'adresse IP de l'utilisateur.

Par exemple, pour pré-sélectionner cet IDP pour les utilisateurs provenant dui réseau 129.168.0.0/16 :

    $ENV{REMOTE_ADDR} =~ /^192\.168/

##### Requête d'authentification

- Format du NameID : force le format du NameID (email, persistent, transient, etc.). Si aucune valeur n'est indiquée, le premier format de NameID activé dans les métadatas sera utilisé.
- Authentification forcée : positionne le drapeau ForceAuthn dans la requête d'authentification
- Authentification passive : positionne le drapeau IsPassive dans la requête d'authentification
- Authentification proxy autorisée : autorise qu'une réponse d'authentification soit issue d'un autre IDP que celui enregistré (proxy IDP). En interdisant ceci, on risque d'interdire aussi les authentification directe des IDP car la restriction est indiquée dans la requête d'authentification.
- Authentification depuis le fournisseur autorisée : autorise l'utilisateur à se connecter directement depuis un lien de l'IDP. Dans ce cas, l'authentification n'est pas une réponse à une requête d'authentification ce qui diminue les capacités de contrôle.
- Contexte d'authentification demandé : ce contexte est déclaré dans la requête d'authentification. À la réception de la requête, le contexte d'authentification réel est traduit en un niveau d'authentification interne (voir comment configurer la translation), utilisable pour accorder ou non la création de session.
- Allow URL as RelayState: Set to On if the RelayState value sent by IDP is the URL where the user must be redirected after authentication.

##### Session

- Adaptation de la durée de vie de la session : la durée de vie de la session sera adaptée sur la base de la valeur de `SessionNotOnOrAfter` dans les réponses d'authentification. Celà signifie que si l'IDP propose de clore la session au-delà de la durée de vie par défaut dans LemonLDAP::NG, la valeur de _utime sera modifiée afin que la session ne soit effacée qu'au moment indiqué par l'IDP.
- Forcer l'UTF-8 : force la conversion UTF-8 des valeurs d'attributs collectées depuis l'IDP.
- Store SAML Token: allows to keep SAML token (assertion) inside user session. Don't enable it unless you need to replay this token on an application.

##### Signature

Ces options surchargent les options de signature du service (voir la configuration du service SAML).

- Signature des messages SSO : signe les messages SSO
- Vérification de la signature des messages SSO : vérifie la signature des messages SSO
- Signature des messages SLO : signe les messages de déconnexion SLO (single logout)
- Vérifie la signature des messages SLO : vérifie la signature des messages SLO

##### Méthode

- Méthode SSO : force la méthode à utiliser pour le SSO (http-redirect, http-post, etc.)
- Méthode SLO : force la méthode à utiliser pour le SLO (http-redirect, http-post, etc.)

Si aucune méthode n'est définie, la méthode par défaut des métadatas de l'IDP sera utilisée.

##### Sécurité

- Mode de chiffrement : fixe le mode de chiffrement pour cet IDP (None, NameID ou Assertion).
- Check time conditions: set to Off to disable time conditions checking on authentication responses.
- Check audience conditions: set to Off to disable audience conditions checking on authentication responses.