Authentification personnalisée

Modifié par jhurst le 2020/10/29 13:32


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

Prérequis

  • Avoir récupéré le dossier CustomAuthenticator dans le répertoire add-ons de l’archive d’installation DigDash. Il contient 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.
    • Le dossier Tomcat7 : les versions des librairies pour un serveur Tomcat 7
    • Le dossier Tomcat8 : les versions des librairies pour un serveur Tomcat 8
  • Les manipulations suivantes sont à réaliser le serveur DigDash stoppé.

Configuration du serveur DigDash

Copie des librairies

Ajouter les librairies ainsi que le fichier de configuration des logs du dossier CustomAuthenticator/Tomcat<N> (N : version Tomcat) dans le dossier

<digdash_installation>/apache/lib:

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 

Librairies du dossier CustomAuthenticator/Tomcat8

Ajout de la valve d’authentification personnalisée

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

<digdash_installation>/apache-tomcat/conf

Pour cela, ajouter l’élément Valve suivant dans l’élément Context.

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

Extrait du fichier server.xml

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.
print_debugFacultatif, vaut false par défaut, sinon, ajouter print_debug="true" pour des traces plus verbeuses.

Tableau décrivant les attributs de l’élément Valve

Ajout des contraintes de sécurité

Ajouter les contraintes de sécurité au fichier web.xml situé dans le dossier

<digdash_installation>/apache-tomcat/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>

Extrait du fichier web.xml

URL du serveur et domaine pour le Dashboard

Il peut être nécessaire, et il est conseillé de préciser sur quel serveur/domaine le Dashboard va s’appuyer.

Pour cela, modifier dans le fichier web.xml dans

<digdash_installation>/apache-tomcat/webapps/digdash_dashboard/WEB-INF.

Pour forcer le domaine, changer la valeur du paramètre FORCEDOMAIN à true.
 Mentionner le nom du domaine en changeant le paramètre DOMAIN.

Pour forcer l’adresse du serveur, changer la valeur du paramètre FORCESERVERURL à true.
 Mentionner l’adresse du serveur en changeant le paramètre SERVERURL.

<web-app ...>
    ...
       <servlet>
           <servlet-name>dashServlet</servlet-name>
           <servlet-class>com.digdash.server.DigdashServiceImpl</servlet-class>
            ...
           <init-param>
               <param-name>DOMAIN</param-name>
               <param-value>ddenterpriseapi</param-value>
           </init-param>

           <init-param>
               <param-name>FORCEDOMAIN</param-name>
               <param-value>true</param-value>
           </init-param>

           <init-param>
               <param-name>SERVERURL</param-name>
               <param-value>http://localhost:8080</param-value>
           </init-param>

           <init-param>
               <param-name>FORCESERVERURL</param-name>
               <param-value>true</param-value>
           </init-param>
        ...
       </servlet>
    ...
</web-app>

 

Valeur variable selon l’installation : "ddenterpriseapi" / "true" / "8080".

 

Extrait du fichier web.xml

La valeur d’exemple pour le paramètre 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 % 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.

Ce paramètre est éditable via le fichier web.xml comme indiqué ci-dessus. Ce fichier est propre à chaque installation de DigDash. Il vous est possible de renseigner ce paramètre de manière plus globale dans le fichier

<utilisateur>/Application Data/Enterprise Server/dashboard_system.xml

Pour en savoir plus, vous pouvez vous référer à la documentation DigDash « guide_avance_systeme_fr.pdf ».

Changement de la valeur du paramètre sharedPasswd

Dé-commenter et changer la valeur du paramètre sharedPasswd (valeur secret ci-dessous à changer) dans le fichier web.xml dans le dossier

<DDE Install>/apache-tomcat/webapps/digdash_dashboard/WEB-INF.

La valeur doit correspondre à celle mentionnée dans l’attribut sharedPasswd dans la valve du fichier

<DDE Install>/apache-tomcat/conf/server.xml (voir partie II.2).

<web-app ...>
    ...
       <servlet>
           <servlet-name>dashServlet</servlet-name>
           <servlet-class>com.digdash.server.DigdashServiceImpl</servlet-class>
            ...
           <init-param>
               <param-name>sharedPasswd</param-name>
               <param-value>secret</param-value>
           </init-param>
            ...
       </servlet>
    ...
 </web-app>

Valeur variable selon l’installation : "secret".

Extrait du fichier server.xml

 

Modification de la méthode d'authentification

Modifier le paramètre authMethod pour changer la méthode d'authentification (LDAP est la méthode par défaut) dans le fichier web.xml situé dans le dossier

<DDE Install>/apache-tomcat/webapps/ddenterpriseapi/WEB-INF.

"External" signifie que la sécurité est gérée par la valve configurée ci-dessus.

<web-app ...>
    ...
       <servlet>
            ...
       </servlet>
    ...
       <servlet>
           <description></description>
           <display-name>DDEnterpriseAuthServlet</display-name>
           <servlet-name>DDEnterpriseAuthServlet</servlet-name>
           <servlet-class>com.digdash.server.DDEnterpriseAuthServlet</servlet-class>

           <init-param>
               <param-name>authMethod</param-name>
               <param-value>External</param-value>
           </init-param>
    ...
       </servlet>
    ...
 </web-app>

Extrait du fichier web.xml