Configurer l'authentification SAML
La norme SAML (Security Assertion Markup Language) est un standard ouvert qui permet à diverses applications de s'authentifier de manière unique auprès d'un portail d'identification.
Au sein du protocole SAML, on distingue deux entités :
- IdP (Identity Provider) : Le gestionnaire d'identités, qui gère l'authentification et est garant de l'authenticité d'une personne et des informations qui lui sont liées. Les gestionnaires suivants sont parmi les plus connus : Microsoft ADFS (via Active Directory), Azure AD, Okta et Auth0.
- SP (Service Provider) : Le fournisseur de service qui va déléguer l'authentification à l'IdP. Il s'agit du serveur Akuiteo.
Note
Le protocole SAML prévoit deux grands types d'opérations : l'Authentication et le Provisioning. Le Provisioning, qui sert à créer et alimenter un utilisateur non connu, n'est pas géré par Akuiteo.

Important
Le Portail Collaborateur et le Portail Client ne peuvent en aucun cas remplacer le rôle de SP. L'accès au serveur Akuiteo est donc obligatoire.
Vous devez ouvrir les flux HTTPS entre Akuiteo et l'IdP pour que les échanges puissent se faire.
Comme le SP est le serveur Akuiteo, l'utilisateur doit avoir accès aux adresses suivantes :
- /akuiteo/login.html
- /akuiteo/routing.html
- /akuiteo/saml/SSO
- /akuiteo/saml/logout
De plus, le code utilisateur doit être l'adresse mail de l'utilisateur.


La procédure détaillée pour créer une approbation de partie de confiance est disponible dans la documentation Microsoft. La procédure ci-dessous explique les étapes propres à la mise en place de SAML pour Akuiteo.
1 | Depuis le gestionnaire de serveur, cliquez sur Outils > Gestion AD FS. |
2 | Depuis la section Actions sur la droite, cliquez sur Ajouter une approbation de partie de confiance. |
3 | Dans la fenêtre de création, renseignez les informations suivantes : |
- Dans la page Sélectionner une source de données, sélectionnez Entrer manuellement les données concernant la partie de confiance.
- Dans la page Configurer l'URL, cochez la case Activer la prise en charge du protocole WebSSO SAML 2.0 et renseignez l'URL du service SSO SAML de la partie de confiance, c'est-à-dire l'URL SAML du Service Provider (Akuiteo), par exemple : https://XXXXX/akuiteo/saml/SSO.
Note
Cette URL doit être sécurisée et commencer par https://. Elle doit également être accessible depuis un poste collaborateur (adresse interne au réseau local ou accessible depuis l'extérieur du réseau).
- Dans la page Configurer les identificateurs, renseignez l'URL de votre serveur Akuiteo, par exemple : https://akuiteo.myakuiteo.com/akuiteo.
- Dans la page Choisir la stratégie de contrôle d'accès, sélectionnez la stratégie suivante : Permit everyone.
4 | Terminez la création de l'approbation. |

Vous devez désormais créer deux règles de revendication :
- La première règle de mapping pour lier le champ mail de l'AD vers le champ mail du message SAML.
- La deuxième règle pour transformer le champ mail du message SAML en NameID.
1 | Depuis la liste des approbations de partie de confiance, faites un clic droit sur l'approbation créée > Modifier les règles de revendication.... |
2 | Depuis l'onglet Règles de transformation d'émission, cliquez sur Ajouter une règle... pour créer la première règle : |
- Dans la page Choisir le type de règle, sélectionnez le modèle Envoyer les attributs LDAP en tant que revendications.
- Dans la page Configurer la règle de revendication, sélectionnez les informations suivantes :
- Magasin d'attributs : Active Directory
- Attribut LDAP : E-Mail-Addresses
- Type de revendication sortante : Adresse de messagerie
3 | Créez ensuite la deuxième règle : |
- Dans la page Choisir le type de règle, sélectionnez le modèle Transformer une revendication entrante.
- Dans la page Configurer la règle de revendication, sélectionnez les informations suivantes :
- Type de revendication entrante : Adresse de messagerie
- Type de revendication sortante : ID de nom
- Format d'ID de nom sortant : Adresse de messagerie
- Passer toutes les valeurs de revendication coché

Depuis la liste des approbations de partie de confiance, faites un clic droit sur l'approbation créée > Propriétés > onglet Avancées et vérifiez que l'Algorithme de hachage sécurisé est bien SHA-256. Renseignez cette valeur si besoin.

1 | Dans un navigateur web, entrez l'adresse https://portal.azure.com/ et connectez-vous en tant qu'administrateur. Sur la page d’accueil, cliquez sur le bouton Voir dans la section Gérer Azure Active Directory. |
2 | Cliquez sur Applications d'entreprise dans le menu de gauche, puis cliquez sur Nouvelle application depuis l'entête de la page des applications. |
3 | Cliquez ensuite sur Créer votre propre application. |
4 | Renseignez le Nom de cette nouvelle application (par exemple Akuiteo-Production) et laissez l'option Integrate any other application you don't find in the gallery (Non-gallery) cochée. Cliquez ensuite sur Créer. |
5 | Sur la page de la nouvelle application, sélectionnez le bloc 2. Configurer l'authentification unique puis sélectionnez le bloc SAML. |
6 | Dans la page de configuration de l'authentification, renseignez les champs obligatoires : |
- Identificateur (ID d'identité) - URL de votre serveur Akuiteo, par exemple : https://akuiteo.myakuiteo.com/akuiteo
- URL de réponse - URL de connexion SAML basée sur l'URL précédente (suffixée par /saml/SSO), par exemple : https://akuiteo.myakuiteo.com/akuiteo/saml/SSO


Note
Cette étape n'est pas nécessaire pour les clients en SaaS.
Le serveur Akuiteo doit disposer d'un fichier de certificat au format .jks afin de crypter les échanges avec l'IdP. Pour cela, nous utilisons l'utilitaire Java Keytool afin de créer un certificat auto-signé.
1 | Sur le serveur Akuiteo, exécutez la commande suivante : |
keytool -genkey -keyalg RSA -alias saml -keystore saml.jks -keysize 2048
2 | Renseignez les informations principales du certificat et conservez bien le mot de passe du fichier. L'extrait suivant est un exemple : |
Quels sont vos nom et prénom ?
[Unknown]: Akuiteo
Quel est le nom de votre unité organisationnelle ?
[Unknown]: IT
Quel est le nom de votre entreprise ?
[Unknown]: Akuiteo
Quel est le nom de votre ville de résidence ?
[Unknown]: Lyon
Quel est le nom de votre état ou province ?
[Unknown]: Rhône
Quel est le code pays à deux lettres pour cette unité ?
[Unknown]: FR
Est-ce CN=Akuiteo, OU=IT, O=Akuiteo, L=Lyon, ST=Rhône, C=FR ?
[non]: oui
Entrez le mot de passe de la clé pour <saml>
(appuyez sur Entrée s'il s'agit du mot de passe du fichier de clés) :
Ressaisissez le nouveau mot de passe :
Warning:
Le fichier de clés JKS utilise un format propriétaire. Il est recommandé de migrer vers PKCS12, qui est un format standard de l'industrie en utilisant "keytool -importkeystore -srckeystore saml.jks -destkeystore saml.jks -deststoretype pkcs12".
Un fichier saml.jks est généré. Ce fichier sera utilisé par la suite dans la configuration Akuiteo.

Sur le serveur Akuiteo, exécutez la commande suivante :
keytool -export -alias saml -keystore "C:\Keys\saml.jks" -rfc -file C:\Keys\saml.cert
Où le chemin contient une référence sur le serveur Akuiteo.
Si besoin, importez le fichier saml.cert côté ADFS.

Coté Akuiteo, les informations de configuration SAML sont définies dans la Console d'administration, depuis le menu Sécurité > SAML.
1 | Depuis l'écran Configurations SAML, cliquez sur le bouton Créer une nouvelle configuration en haut à droite de l'écran. |
2 | Dans la fenêtre de configuration, renseignez les champs suivants : |
Champ | Description |
---|---|
Code | Attribuez un code à la configuration pour l'identifier. Ce code doit être unique. |
Configuration active |
Cochez cette case pour activer l'authentification avec SAML. Si la case n'est pas cochée, l'authentification sera fondée sur une autre méthode d'authentification (si activée) ou sur la base de données. |
IDP |
Renseignez le champ identificateur de l'IdP, correspondant à l'Entity ID. Vous pouvez retrouver cet ID dans le fichier metadata.xml. Si vous utilisez Active Directory, il s'agit de l'Identificateur Azure AD. |
Audience |
Renseignez l'identifiant de l'application auprès de l'IdP et l'URL publique. Si vous utilisez Active Directory, il s'agit de l'Identificateur (ID d'identité). |
MetaLocation |
Renseignez l'emplacement du fichier de metadata (URL ou fichier local). Si vous utilisez Active Directory, il s'agit de l'URL des métadonnées de fédération d'applications. |
KeyAlias |
Renseignez l'alias du fichier de certificat (.jks). |
KeyPwd |
Renseignez le mot de passe du fichier de certificat (.jks). |
KeyLocation | Renseignez l'emplacement du fichier de certificat (.jks). |
userNameDomains |
Lorsque l'authentification SAML est activée, tout identifiant mail est redirigé par défaut vers l'IdP afin d'être authentifié. Si vous souhaitez limiter cette authentification à certains domaines mail, ajoutez les domaines dans le champ userNameDomains. Ce champ vous permet de spécifier :
|
redirectDomainWhitelist |
Si le domaine d’authentification est différent du domaine d’accès à l’application Akuiteo, il est nécessaire d’autoriser le domaine d’authentification au niveau du serveur métier Akuiteo. Dans ce cas, renseignez le domaine d’authentification à autoriser. Par exemple : exemple.authentification.com |
Note
Les fichiers MetaLocation et KeyLocation ont une notation "URL" : le protocole doit donc être spécifié en entête. Dans le cas d'un fichier stocké en local, faites précéder le chemin par file:/.
3 | Cliquez sur Enregistrer. |
Si la connexion est établie, la configuration est ajoutée dans la Console d'administration. Si la connexion ne peut pas être établie, un message d'erreur est affiché.
4 | Redémarrez le serveur pour que la configuration soit prise en compte. |
Pour modifier une configuration, cliquez sur pour la ligne concernée, modifiez les informations souhaitées puis cliquez sur Mettre à jour.
Pour supprimer une configuration, cliquez sur pour la ligne concernée et confirmez la suppression.


1 | Depuis le répertoire d'installation Tomcat du serveur Akuiteo, allez dans conf. |
2 | Ouvrez le fichier de configuration context.xml avec un éditeur de texte. |
3 | Enlevez le commentaire du tag <Manager ... /> comme suit : |
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<Manager pathname="" />
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>

Lors d'une phase de connexion SAML, le Portail Collaborateur et le Portail Client effectuent une redirection vers le serveur Akuiteo afin d'initier la connexion SAML. Les portails doivent donc connaître l'adresse externe / publique du serveur Akuiteo.
Pour cela, deux solutions sont possibles :
- Ajoutez un élément de configuration pour chaque portail.
- Dans le fichier de configuration context.xml, ajoutez :
<!-- SAML -->
<Environment name="t9gestion#t9gest.extrernal.server.url" type="java.lang.String" override="false" value="https://akuiteo.myakuiteo.com/akuiteo"/>

Si un reverse proxy est utilisé en front du serveur métier Akuiteo, il faut ajouter la configuration suivante au connecteur HTTP de Tomcat (fichier de configuration server.xml ou context.xml) :
<Connector port="${http.port}"
protocol="org.apache.coyote.http11.Http11NioProtocol"
server="Akuiteo"
proxyName="akuiteo.xxx.com"
proxyPort="443"
scheme="https"
/>
Où :
- proxyName est le DN correspondant à l’accès à Akuiteo via le reverse proxy
- proxyPort est le port d’accès à Akuiteo via le reverse proxy (généralement 443)
- scheme est le protocole d’accès à Akuiteo via le reverse proxy (généralement https)

Si le serveur Akuiteo et le ou les portails web sont hébergés sur des instances Tomcat séparées, vous devez "aligner" le secret JWT, c'est-à-dire harmoniser ce secret entre chaque instance. Ce secret est utilisé pour le cryptage des identifiants collaborateurs entre les différents serveurs Akuiteo. Un secret de 63 caractères alphanumériques est suffisant.
Astuce
Pour générer le secret JWT, vous pouvez utiliser un générateur (par exemple https://www.grc.com/passwords.htm).
Renseignez le secret dans les paramètres JVM de chaque Tomcat en ajoutant par exemple :
-Djwt.secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX