Introduction

L'objectif ici était de tester un accès via automation à nuxeo en utilisant le plugin de login portal-sso.

Ceci dans la perspective d'utiliser cette méthode dans de futures portlets.

esup-file-manager utilise déjà ce plugin mais via un client CMIS et pas automation. On verra qu'il y quelques subtilités.

Mise en œuvre

La première chose à faire est de configurer le plugin de login portal-sso.

Je conseille la lecture de cette réponse sur answers.nuxeo.com

Néanmoins ma documentation précise un point concernant la surcharge d'une chaîne d’authentification spécifique introduite avec automation.

Configuration

Création d'un template dev_sso

Le plugin portal-sso se trouve sous https://maven-eu.nuxeo.org/nexus/content/repositories/public-releases/org/nuxeo/ecm/platform/nuxeo-platform-login-portal-sso

 

Contenu :

templates/dev_sso/config/portal-auth-config.xml
templates/dev_sso/bundles/nuxeo-platform-login-portal-sso-5.4.1-HF11.jar
templates/dev_sso/nuxeo.defaults

Explications :

Le fichier portal-auth-config.xml

<component name="MyAPP.postal_sso">
   <require>org.nuxeo.ecm.platform.ui.web.auth.defaultConfig</require>
   <require>org.nuxeo.ecm.platform.login.Portal</require>
<!-- RB : on surcharge la conf de org.nuxeo.ecm.automation.server.auth.config qui définit une specificAuthenticationChain sans PORTAL_AUTH -->
   <require>org.nuxeo.ecm.automation.server.auth.config</require>

   <extension
      target="org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
      point="authenticators">
      <authenticationPlugin
              name="PORTAL_AUTH">
       <loginModulePlugin>Trusting_LM</loginModulePlugin>
       <parameters>
         <!-- define here shared secret between the portal and Nuxeo server -->
         <parameter name="secret">toto</parameter>
         <parameter name="maxAge">3600</parameter>
       </parameters>
      </authenticationPlugin>
  </extension>

<!-- RB : On surcharge ici la specificAuthenticationChain de org.nuxeo.ecm.automation.server.auth.config -->
  <extension
      target="org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
      point="specificChains">

    <specificAuthenticationChain name="Automation">
        <urlPatterns>
            <url>(.*)/automation.*</url>
        </urlPatterns>

        <replacementChain>
            <plugin>AUTOMATION_BASIC_AUTH</plugin>
	    <plugin>PORTAL_AUTH</plugin>
            <plugin>ANONYMOUS_AUTH</plugin>
        </replacementChain>
    </specificAuthenticationChain>

  </extension>

</component>

Explications :

Le code java

Cf. NuxeoRESTWithSSSOTest.java

A partir de la version 5.4.2 du client automation on dispose d'un objet PortalSSOAuthInterceptor. Il suffit d'utiliser ce dernier lors de l'établissement de la connexion. On le construit en lui passant en paramètre le secret contenu dans portal-auth-config.xml et l'uid de l'utilisateur courant.

Voici un exemple de code :

HttpAutomationClient client = new HttpAutomationClient("http://localhost:8080/nuxeo/site/automation");
String secret = "toto";
String user = "test";
client.setRequestInterceptor(new PortalSSOAuthInterceptor(secret, user));
Session session = client.getSession();

Pour utiliser la version 5.4.2 du client automation il suffit d'ajouter cette dépendance de le pom.xml de votre projet maven :

<dependency>
 <groupId>org.nuxeo.ecm.automation</groupId>
 <artifactId>nuxeo-automation-client</artifactId>
 <version>5.4.2</version>
</dependency>

Sachant que pour trouver cette dépendance il faut référencer le dépôt maven de nuxeo :

<repositories>
 <repository>
  <id>nuxeo</id>
  <url>https://maven.nuxeo.org/nexus/content/repositories/public-releases</url>
  <releases>
   <enabled>true</enabled>
  </releases>
  <snapshots>
   <enabled>false</enabled>
  </snapshots>
 </repository>
</repositories>