# SAML

## Prérequis (auto-hébergé)

| Version GLPI | PHP Minimum | Recommandé |
| ------------ | ----------- | ---------- |
| 10.0.x       | 8.1         | 8.2        |

{% hint style="info" %}
Ce plugin est disponible sans souscription [GLPI Network](https://services.glpi-network.com/#offers). Il est également disponible sur [GLPI Cloud](https://glpi-network.cloud).
{% endhint %}

{% hint style="info" %}
**Nous recommandons l'utilisation des plugins** [OAuth SSO](https://help.glpi-project.org/doc-plugins/fr/plugin-glpi-network/oauthsso) **et** [SCIM ](https://help.glpi-project.org/doc-plugins/fr/plugin-glpi-network/scim)**si vous avez besoin d'autologin ou de provisionnement d'utilisateurs, officiellement supportés par l'éditeur.**

Mais nous suggérons l'utilisation de ce plugin si le protocole SAML est obligatoire pour votre organisation.
{% endhint %}

{% hint style="warning" %}
Vous avez besoin d'un accès administrateur à la console Entra/Google pour configurer l'application
{% endhint %}

## Télécharger le plugin

* Depuis la marketplace (**Configuration > Plugins**), téléchargez le plugin **GLPI SAML**

<div align="left"><figure><img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-6f5ec485e83aa32e7c60deef25b8d3d955bbf228%2Fdownload-plugin.png?alt=media" alt="images/download-plugin.png"><figcaption></figcaption></figure></div>

## Entra

### Ajouter une nouvelle application SAML sur GLPI

Tout d'abord, vous devez ajouter une application SAML sur GLPI car nous avons besoin de rapporter certaines informations sur GLPI <-> Entra/Google.

* Dans **Configuration** > **Applications SSO SAML**, cliquez sur **+ Ajouter**
* Donnez un **nom** à votre application
* Cliquez sur **est actif**
* Cliquez sur **Enregistrer**

![Ajouter une application GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-944fa49ac57eb5a488921c17627ff0f4c7c776ee%2Fadd-app-glpi.png?alt=media)

* Pour Entra, dans l'onglet **Transit**, sélectionnez :
  * Compress requests
  * Compress responses

![Configuration du transit](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-396a1434a9e0c408746135527b57cf5beac4264a%2Ftransit-setup.png?alt=media)

### Ajouter une application dans Entra

* Connectez-vous à votre [portail Entra](https://portal.azure.com/#home)
* Cliquez sur **Application d'entreprise**
* **ET + Nouvelle application**
* Dans la barre de recherche, entrez **saml toolkit**
* Cliquez sur **Microsoft Entra SAML Toolkit**

![Créer une application Entra](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-c4f11be1a5d6250ae908b9584014cb7140bf264f%2Fadd-app-entra.png?alt=media)

* Optionnel : Vous pouvez renommer cette application
* Cliquez sur **Créer**

Lorsque l'application est créée :

* Allez dans **Single sign-on**
* Cliquez sur SAML

![Créer une application SAM Entra](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-7417896904b510b8b2393373787f2deade409ba1%2Fsetup-saml-entra.png?alt=media)

### Configuration de l'application

* Dans le 1er encart, cliquez sur **Modifier**
* Copiez les valeurs comme suit

![Reporter les valeurs dans Entra](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-3df1919a32f280ec5a50872ee09f8d46052dd04d%2Fsetup-basic-saml-entra.png?alt=media)

![Voir les valeurs dans GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-5ae290f4b66279d199db85e036efe930e6a8dcd8%2Fsetup-basic-saml-glpi.png?alt=media)

### Configuration du Fournisseur de Services (SP)

Dans **Certificat SP** et **Clé privée SP**, copiez/collez votre certificat à la place de ceux déjà présents. Il n'y a pas d'exigences strictes pour ces certificats, autres que le fait qu'ils soient des certificats X509 valides.

![Configuration des valeurs](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-155439ea171827f6c18a1a160890daa86d87cb30%2Fcertificates-service-provider.png?alt=media)

### Configuration du Fournisseur d'Identité (IdP)

* Dans le troisième encart de l'application Entra, cliquez sur **Télécharger** depuis **Certificat (Base64)**

![Télécharger le certificat](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-519c29d7e26cfa1e0596f0b7967bdf34b21bbad5%2Fextract-certificate.png?alt=media)

* **Ouvrez** ce certificat avec notepad ++ (ou un autre outil capable de lire ce type de certificat)
* **Copiez** le contenu du certificat dans GLPI avec les balises
* **Collez** le certificat dans **Fournisseur d'identité** > **Certificat X509**
* Remplissez ensuite les champs comme suit avec les informations du quatrième encart :

![Coller le certificat et configurer les valeurs](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-fe0a929d65461bda8a229c4ca6048c86994c2351%2Fsetup-identity-provider.png?alt=media)

![Configuration des valeurs](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-482bf1236001ab618d3ef2bb1bae6dcfd57d804d%2Fsetup-identity-provider-toolkit.png?alt=media)

{% hint style="info" %}
Il est conseillé d'utiliser **none** comme **REQ AUTHN CONTEXT**
{% endhint %}

### Sécurité

Pour une instance de production, vous devez activer l'option **Strict**.

Nous vous conseillons d'activer la **création d'utilisateurs JIT**. Cela permettra d'appliquer les règles que vous créerez à partir des Règles JIT.

![Options de sécurité](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-3bd02643a9019d9c1c88826e567445462e34dfc8%2Fsecurity.png?alt=media)

{% hint style="warning" %}
Pour que le plugin authentifie un utilisateur, le champ doit contenir un **UPN valide** formaté **comme un email**. Ce comportement peut entraîner des doublons dans GLPI lorsque les utilisateurs quittent Ldap. C'est un détail important car certains utilisateurs qui quittent Active directory dans certains scénarios utilisent encore le nom de compte usersam (anciens noms netbui) comme UPN dans Entra. Par conséquent, le champ nameId dans samlResponse ne sera pas rempli avec une adresse e-mail valide. Le champ username est utilisé car le champ email n'est pas garanti d'être unique dans GLPI et il est essentiel qu'un identifiant unique soit utilisé pour permettre l'autorisation d'un utilisateur GLPI spécifique.
{% endhint %}

### Ajouter les utilisateurs autorisés à utiliser SAML

SAML a besoin que des utilisateurs/groupes soient ajoutés afin qu'ils soient autorisés à utiliser l'authentification.

* Cliquez sur l'onglet **utilisateurs et groupes**,
* Cliquez sur **+ Ajouter utilisateur/groupe**
* Sélectionnez tous les utilisateurs et groupes requis
* Cliquez sur **Attribuer**

![Ajouter un utilisateur autorisé](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-fc15baf95bac01cd7f792e4754d370ce8e9e5a24%2Fselect-users-groups.png?alt=media)

### Mapping

Si vous souhaitez ajouter des informations supplémentaires à votre profil, vous pouvez utiliser les Attributs et Claims. Votre profil sera rempli avec les informations saisies dans Entra.

* Dans **Single sign on**, cliquez sur **Modifier**
* Copiez l'URL de l'un des autres claims

![Copier le schéma d'URL](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-f6da797db5d9128b8f4105b3a0565973c044000f%2Fcopy_url_claims.png?alt=media)

* Cliquez sur **+ Ajouter un nouveau claim**
* Sélectionnez un nom
* Collez l'URL que vous venez de copier dans **Namespace**
* Sélectionnez **attribute**
* Recherchez la valeur que vous souhaitez dans le **Source attribute**
* Enregistrez votre modification
* Répétez cette étape pour toutes les valeurs souhaitées

![Ajouter des claims dans Entra](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-408e6445e91fe96963d9d340685c871196245455%2Fadd_claims_entra.png?alt=media)

![Voir les claims dans Entra](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-1dde507da44b6b63cc7bcf9513bdabbb93ba5b27%2Fsee_claims_entra.png?alt=media)

### Règles pour l'attribution des autorisations

Il sera nécessaire d'établir des règles pour attribuer des autorisations à vos utilisateurs (pour leur donner un profil, par exemple).

Pour ce faire, allez dans **Administration** > **Règles** > **GLPI SAML - Règles d'importation Saml** ou via le bouton **Règles JIT** directement dans le plugin

> <img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-e96e97269f47e5793ea96ba9ba2cd1c5a2742c9f%2Fadd-rule.png?alt=media" alt="ajouter une règle" data-size="original">

Une limitation stricte du plugin actuel est que les règles ne peuvent être liées qu'à la condition 'email'. Nous prévoyons de permettre la liaison à des SamlClaims supplémentaires, actuellement il ne permet que la valeur communiquée via la propriété nameId ou le claim emailaddress.

Par exemple, vous souhaitez que vos utilisateurs avec authentification SAML obtiennent le profil Self-Service.

Vous configurerez vos critères et actions comme indiqué ici :

> <img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-402b64eec33dde69a167bb715b8b64aae32a0f2d%2Frules.png?alt=media" alt="gérer le type de câble" data-size="original">

### Sources

Microsoft Entra : <https://learn.microsoft.com/en-us/entra/architecture/auth-saml>

Google : <https://support.google.com/a/answer/6087519?hl=en>

## Google

### Ajouter une nouvelle application SAML sur GLPI

Tout d'abord, vous devez ajouter une application SAML sur GLPI car nous avons besoin de rapporter certaines informations sur GLPI <-> Entra/Google.

* Dans **Configuration** > **Applications SSO SAML**, cliquez sur **+ Ajouter**
* Donnez un **nom** à votre application
* Cliquez sur **est actif**
* Cliquez sur **Enregistrer**

![Ajouter une application GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-944fa49ac57eb5a488921c17627ff0f4c7c776ee%2Fadd-app-glpi.png?alt=media)

### Ajouter une application dans Google

* Connectez-vous à votre [portail Google](https://accounts.google.com/)
* Cliquez sur **Applications**
* Cliquez sur **Applications web et mobiles**
* Ensuite, cliquez sur **Ajouter une application**
* Et **Ajouter une application SAML personnalisée**

![Créer une application Google](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-1f0d2d4ae358f9caccfc4dd7aa6d39ad80f6a3d7%2Fadd_custom_app.png?alt=media)

* Nommez votre application
* Cliquez sur **Continuer**

![Donner un nom à votre application](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-507db67ae0c6916f86fb1c1c93cd59799564d07f%2Fapp_name.png?alt=media)

* Cliquez sur **Enregistrer** sur GLPI.

### Configuration du Fournisseur d'Identité (IdP)

* Entrez les valeurs comme indiqué dans les 2 captures d'écran ci-dessous

![Informations IdP Google](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-6e9d752eb7e51c552f8b6c4d492943629274509f%2Fidp_infos.png?alt=media)

![Reporter les valeurs dans GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-176828ebdddaf41e24e229f2fe3c00b32baf4b86%2Fidp_infos_glpi.png?alt=media)

{% hint style="info" %}
Copiez/collez le contenu du certificat dans GLPI avec les balises *---BEGIN CERTIFICATE--- ---END CERTIFICATE---*
{% endhint %}

### Configuration du Fournisseur de Services (SP)

* Dans les détails du Fournisseur de services, reportez les valeurs de GLPI vers Google :

![Informations SP GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-c9ce2668f9e7ecadc41e906047008e22b9654fea%2Fsp_infos_glpi.png?alt=media)

![Reporter les valeurs de GLPI](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-9a5320309ddb25ede66e2f48a6770ac02d9ef9e0%2Fsp_infos.png?alt=media)

* Depuis Google, sélectionnez **EMAIL** dans **Name ID format**
* Dans **Name ID**, sélectionnez **Informations de base > E-mail principal**
* Depuis GLPI, sélectionnez **Email Address** dans **NAMEID FORMAT**

Dans **certificat SP** et **Clé privée SP**, copiez/collez votre certificat à la place de ceux déjà présents. Il n'y a pas d'exigences strictes pour ces certificats, autres que le fait qu'ils soient des certificats X509 valides.

![configuration des valeurs](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-155439ea171827f6c18a1a160890daa86d87cb30%2Fcertificates-service-provider.png?alt=media)

* Cliquez sur **Continuer**
* Puis **Terminer**

Votre application est maintenant créée

![Votre application est maintenant créée](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-99479225c3828adbb502b968220592d95949356a%2Fapp_created.png?alt=media)

### Sécurité

Pour une instance de production, dans GLPI, vous devez activer l'option **Strict** dans la configuration du plugin SAML.

Nous vous conseillons d'activer la **création d'utilisateurs JIT**. Cela permettra d'appliquer les règles que vous créez à partir des Règles JIT.

![options pour la sécurité](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-3bd02643a9019d9c1c88826e567445462e34dfc8%2Fsecurity.png?alt=media)

{% hint style="warning" %}
Pour que le plugin authentifie un utilisateur, le champ doit contenir un **UPN valide** formaté **comme une adresse e-mail**. Ce comportement peut entraîner des doublons dans GLPI lorsque les utilisateurs quittent Ldap. C'est un détail important car certains utilisateurs qui quittent Active Directory dans certains scénarios utilisent toujours le nom de compte usersam (anciens noms netbui) comme UPN dans Entra. Par conséquent, le champ nameId dans samlResponse ne sera pas renseigné avec une adresse e-mail valide. Le champ username est utilisé car le champ e-mail n'est pas garanti d'être unique dans GLPI et il est essentiel qu'un identifiant unique soit utilisé pour permettre l'autorisation d'un utilisateur GLPI spécifique.
{% endhint %}

### Ajouter les utilisateurs autorisés à utiliser SAML

SAML a besoin que des utilisateurs/groupes soient ajoutés afin qu'ils soient autorisés à utiliser l'authentification.

* Sur votre application, cliquez sur l'onglet **Voir les détails** dans **Accès utilisateur**
* Cliquez sur **Activé pour tous**
* Cliquez sur **Enregistrer**

![Autoriser les utilisateurs à utiliser l'application](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-46edc770f6caee9ff37d72e2c6d13c962f64cb74%2Fservice_state.png?alt=media)

### Mapping

Si vous souhaitez ajouter des informations supplémentaires à votre profil, vous pouvez utiliser les Attributs. Votre profil sera renseigné avec les informations saisies dans Entra.

* Dans votre application, cliquez sur **Configurer le mapping d'attributs SAML** dans **Mapping d'attributs SAML**
* Copiez l'URL de l'une des autres revendications (claim)
* Ajoutez les informations que vous souhaitez
* Cliquez sur **Enregistrer**

![ajouter des attributs pour Google](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-860bc1b0d4141fa61e28ca9025ecdd774ce62112%2Fadd_mapping_google.png?alt=media)

![Autoriser les utilisateurs à utiliser l'application](https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-28ff6489fd10e0d1cfcff7bb7a992aa59dbd2d5b%2Fsee_attributes.png?alt=media)

### Règles pour l'attribution des autorisations

Il sera nécessaire d'établir des règles pour attribuer des autorisations à vos utilisateurs (pour leur donner un profil, par exemple).

Pour ce faire, allez dans **Administration** > **Règles** > **GLPI SAML - Règles d'importation Saml** ou via le bouton **Règles JIT** directement dans le plugin

> <img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-e96e97269f47e5793ea96ba9ba2cd1c5a2742c9f%2Fadd-rule.png?alt=media" alt="ajouter une règle" data-size="original">

Une limitation stricte dans le plugin actuel est que les règles ne peuvent être liées qu'à la condition 'email'. Nous prévoyons de permettre la liaison à des SamlClaims supplémentaires, actuellement il ne permet que la valeur communiquée via la propriété nameId ou la revendication emailaddress.

Par exemple, vous souhaitez que vos utilisateurs avec authentification SAML obtiennent le profil Self-Service.

Vous définiriez vos critères et votre action comme indiqué ici :

> <img src="https://782257568-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJFKLcURHvFBybgf5dths%2Fuploads%2Fgit-blob-402b64eec33dde69a167bb715b8b64aae32a0f2d%2Frules.png?alt=media" alt="gérer le type de câble" data-size="original">

### Sources

Microsoft Entra : <https://learn.microsoft.com/en-us/entra/architecture/auth-saml>

Google : <https://support.google.com/a/answer/6087519?hl=en>
