Authentification personnalisée

Modifié par Aurelie Bertrand le 2024/09/12 10:04


Ce document décrit la mise en place d’une valve d’authentification personnalisée pour DigDash Enterprise.

Prérequis

  • Disposer du dossier <Install DD>/add-ons/CustomAuthenticator contenant tous les fichiers nécessaires à la mise en place de la valve d’authentification personnalisée dans le serveur Tomcat de DigDash. Le placement de ces fichiers est décrit dans ce document.
  • Les manipulations suivantes sont à réaliser le serveur DigDash stoppé.

Configuration du serveur DigDash

Copie des librairies

Copiez les librairies ainsi que le fichier de configuration des logs du dossier <install DD>/add-ons/CustomAuthenticator/Tomcat9 dans le dossier :

  • sous Linux : /usr/share/tomcat9/lib/
  • sous Windows : C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib

Fichiers à copier :

custom_authenticator.jarhttpcore-4.4.9.jar
commons-codec-1.10.jarhttpmime-4.5.5.jar
commons-logging-1.2.jarlog4j-1.2.15.jar
httpclient-4.5.5.jar 

Ajout de la valve d’authentification personnalisée

Activez la valve d’authentification personnalisée dans le fichier context.xml situé dans le dossier :

  • sous Linux : /etc/tomcat9/context.xml
  • sous Windows : C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf

Pour cela, cherchez l’élément <Context ...> dans le fichier, décommentez ou y rajoutez l’élément <Valve ...> ci-dessous :

<Valve className="custom.apache.CustomAuthenticator"
      sharedPasswd="secret"
      allowAddr=".*localhost.*,.*127.0.0.*"
      portalUrl="<url>?login=${login}&amp;token=${token}"
      fallbackAuth="LDAP"
      expectedResponse="OK" />

Légende : Valeur invariable / Valeur variable selon l’installation

AttributDescription
classNameNom de la classe Java, implémentant l'interface org.apache.catalina.Valve, à utiliser comme Valve ici. Cet attribut est obligatoire, car il permet de sélectionner la Valve à utiliser. Il en existe en effet plusieurs implémentations fournies par Tomcat.
sharedPasswdLe mot de passe partagé et vérifié à l’authentification (voir point II.5)
allowAddrExpression(s) régulière(s) que l’adresse d’envoi des requêtes vers le dashboard doit satisfaire. Dans le cas de regex multiples, séparer par des virgules.
portalUrl

L’adresse de la page de vérification de utilisateur et du jeton (token).

- Elle peut être unique et demander la validation à un seul et même serveur ; dans ce cas:

<protocole>://<hôte>:<port>/<contexte>/<chemin>?login=${login}&amp;token=${token}

- Elle peut correspondre à l’adresse de la source émettrice de la requête d’accès vers le dashboard ; indiquer dans ce cas seulement le chemin restant :

<contexte>/<chemin>?login=${login}&amp;token=${token}

La valve analysera dans les paramètres header de la requête entrante le Referer vers lequel renvoyer la demande de vérification.

fallbackAuthMéthode d'authentification à  utiliser en cas d'échec de l'authentification de la valve.
expectedResponseRéponse renvoyée par la page en cas d'authentification valide (non sensible à  la casse), toutes autres réponses conduit à  l'échec de l'authentification.
excludedPathsFacultatif, il s’agit des expressions régulières des chemins dont les ressources sont autorisées à passer la valve, passant ainsi en mode d’authentification LDAP. Exemple : "/.*"
print_debugFacultatif, vaut false par défaut, sinon, ajouter print_debug="true" pour des traces plus verbeuses.

Ajout des contraintes de sécurité

Décommentez ou ajoutez les contraintes de sécurité au fichier web.xml situé dans le dossier :

  • sous Linux : /etc/tomcat9/
  • sous Windows : C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf
<web-app ...>
  ...
   <security-role>
       <role-name>CUSTOM</role-name>
   </security-role>

   <security-constraint>
       <display-name>CUSTOM Security Constraint</display-name>
           <web-resource-collection>
               <web-resource-name>Protected Area</web-resource-name>
                   <url-pattern>/*</url-pattern>
               </web-resource-collection>
               <auth-constraint>
                   <role-name>CUSTOM</role-name>
               </auth-constraint>
           </security-constraint>

           <security-constraint>
               <web-resource-collection>
                   <web-resource-name>Non-Protected Area</web-resource-name>
                   <url-pattern>/vjdbc</url-pattern>
               </web-resource-collection>
           </security-constraint>
    ...
</web-app>

 

Configuration des applications

Pour cela, modifiez le fichier digdash.properties dans <install DD> ou /etc/digdash ou dans le dossier que vous auriez configuré.

Configuration du Serveur (ddenterprise.war)

Dans le fichier digdash.properties :

Dans l'encadré ddenterpriseapi.war, recherchez et dé-commentez les lignes suivantes avec les valeurs indiquées :

ddenterpriseapi.authMethod=External

Configuration du Tableau de bord (digdash_dashboard.war)

Dans le fichier digdash.properties :

Dans l'encadré digdash_dashbord.war, recherchez et dé-commentez les lignes suivantes avec les valeurs indiquées :

digdash_dashboard.SERVERURL=http://localhost:8080
digdash_dashboard.DOMAIN=ddenterpriseapi
digdash_dashboard.FORCEDOMAIN=true
digdash_dashboard.FORCESERVERURL=true
digdash_dashboard.sharedPasswd=<la valeur de l'attribut sharedPasswd dans l'élément Valve>

La valeur d’exemple pour le paramètre digdash_dashboard.SERVERURL fera quasiment toujours référence à localhost, lorsque le tableau de bord et le serveur sont placés dans le même serveur Tomcat, ce qui représente quasiment 99.9 % des usages. Il faudra naturellement faire référence à l’adresse du serveur externe si ces deux éléments sont placés sur des serveurs différents.

Configuration du Studio (studio.war)

Dans le fichier digdash.properties :

Dans l'encadré studio.war, recherchez et dé-commentez les lignes suivantes avec les valeurs indiquées :

studio.SERVERURL=http://localhost:8080
studio.DOMAIN=ddenterpriseapi
studio.FORCEDOMAIN=true
studio.FORCESERVERURL=true
studio.PUBLICSERVERURL=<votre adresse URL publique>
studio.sharedPasswd=<la valeur de l'attribut sharedPasswd dans l'élément Valve>

La valeur d’exemple pour le paramètre studio.SERVERURL fera quasiment toujours référence à localhost, lorsque le Studio et le serveur sont placés dans le même serveur Tomcat, ce qui représente quasiment 99.9 % des usages. Il faudra naturellement faire référence à l’adresse du serveur externe si ces deux éléments sont placés sur des serveurs différents.