Passer au contenu principal

Comment configurer l’authentification unique Camunda par Keycloak

Dans cet article nous allons voir comment configurer l’application web de Camunda BPM et le serveur Keycloak pour se connecter en utilisant l’authentification unique (SSO),à travers le protocole OpenID Connect. Les deux partageront le même référentiel d’utilisateurs et de groupes dans LDAP.

Pour configurer l’application web, nous utiliserons le plugin Keycloak Camunda Identity Provider, car il facilite l’intégration avec Keycloak.

1. Configuration de Keycloak

Tout d’abord, nous devons configurer un nouveau realm dans Keycloak, qui sera partagé avec l’application web de Camunda. Un realm est un domaine d’utilisateurs, d’informations d’identification, de rôles et de groupes. Dans ce cas, nous allons configurer un realm dans un référentiel d’utilisateurs LDAP existant.

1.1 Configuration du realm de LDAP

À cette étape, nous allons configurer le realm ou domaine utilisateur LDAP. Les étapes à suivre sont:

1.Depuis le panneau d’administration, nous sélectionnons l’option Add Realm (ajouter domaine)et nous créons un realm avec le nom Ldap.Ensuite, nous ajoutons un fournisseur de type ldap dans Add user federation provider (Ajouter un fournisseur de fédération d’utilisateurs).

User Federation

2. Ensuite, nous configurons les paramètres de notre LDAP dans le formulaire suivante:

Add user

3. Et nous activons la synchronisation avec les options Periodic Full Sync et Periodic Changed Users Sync (Synchronisation complète périodique et synchronisation périodique des utilisateurs modifiés).

4. Enfin, nous sauvegardons et exécutons l’option Synchronize all users (Synchroniser tous les utilisateurs). À ce étape, à partir de l’onglet Users nous pouvons déjà voir les utilisateurs existants dans notre LDAP:

1.2 Configuration du groupe LDAP

Une fois le premier point terminé, nous allons configurer les groupes LDAP.

1.Dans User Federation (Fédération des utilisateurs), et dans l’onglet Mappers (mappeurs), nous allons configurer aussi les groupes de LDAP, et pour cela nous devons ajouter un nouveau mapper (mappeur). Les paramètres seront les suivants:

2. Si nous resynchronisons les utilisateurs, nous pouvons voir la liste des groupes dans LDAP:

1.3 Configuration depuis l’application client Camunda dans Keycloak

Dans cette étape, nous allons configurer l’application cliente Camunda dans Keycloack, nous suivrons les étapes suivantes:

1.Nous allons enregistrer l’application Camunda dans Keycloak. Pour ce faire, nous allons d’abord créer un nouveau client appelé camunda-id-service:

2. Ensuite, nous sélectionnerons les options:

3. Dans l’onglet Service Account Roles (Rôles de compte de service), nous allons ajouter les rôles query-groups, query-users, view-users aux rôles de client du service account realm-management (si nous étions dans le maître du realm, nous utiliserions le realm master-realm).

4. Enfin, nous prendrons note des identifiants du client dans:

2. Configuration de Camunda

Dans cette avant-dernière étape, nous allons faire la configuration de Camunda et LDAP ainsi que la configuration de Camunda et l’authentification unique (SSO).

2.1 Configuración de Camunda y LDAP

1.Pour connecter Camunda avec LDAP, nous allons ajouter la configuration au fichier conf/bpm-platform.xml comme dans l’exemple suivant:

<plugin>
        <class>org.camunda.bpm.identity.impl.ldap.plugin.LdapIdentityProviderPlugin</class>
        <properties>
​
          <property name="serverUrl">ldap://sandbox-openldap:389/</property>
          <property name="acceptUntrustedCertificates">false</property>
          <property name="managerDn">cn=admin,dc=demo,dc=chakray,dc=cloud</property>
          <property name="managerPassword">password</property>
​
          <property name="baseDn">dc=demo,dc=chakray,dc=cloud</property>
​
          <property name="userSearchBase">ou=Users</property>
          <property name="userSearchFilter">(objectclass=person)</property>
​
          <property name="userIdAttribute">uid</property>
          <property name="userFirstnameAttribute">cn</property>
          <property name="userLastnameAttribute">sn</property>
          <property name="userEmailAttribute">mail</property>
          <property name="userPasswordAttribute">userpassword</property>
​
          <property name="groupSearchBase">ou=Groups</property>
          <property name="groupSearchFilter">(objectclass=groupOfNames)</property>
          <property name="groupIdAttribute">cn</property>
          <property name="groupNameAttribute">cn</property>
​
          <property name="groupMemberAttribute">member</property>
          <property name="sortControlSupported">false</property>
​
        </properties>
      </plugin>
​
      <!-- LDAP CONFIGURATION -->
      <!-- The following plugin allows you to grant administrator authorizations to an existing LDAP user -->
      <plugin>
        <class>org.camunda.bpm.engine.impl.plugin.AdministratorAuthorizationPlugin</class>
        <properties>
          <!--<property name="administratorUserName">camunda-admin</property>-->
          <property name="administratorGroupName">camunda-admins</property>
        </properties>
      </plugin>

2.2 Configuration de Camunda et authentification unique (SSO)

1. Dans cette étape, vous devez éditer le fichier conf/bpm-platform.xml et ajoutez la configuration de plugin suivante. Dans ce cas, nous incluons la clé que nous avons obtenue dans Keycloak.

<plugin>
    <class>org.camunda.bpm.extension.keycloak.plugin.KeycloakIdentityProviderPlugin</class>
    <properties>
        <property name="keycloakIssuerUrl">http://localhost:8081/auth/realms/Ldap</property>
        <property name="keycloakAdminUrl">http://localhost:8081/auth/admin/realms/Ldap</property>
        <property name="clientId">camunda-id-service</property>
        <property name="clientSecret">84d2bfb5-5ced-45de-8123-3a8b5c531248</property>
        <property name="useUsernameAsCamundaUserId">true</property>
        <property name="useGroupPathAsCamundaGroupId">true</property>
        <property name="administratorGroupName">camunda-admin</property>
        <property name="disableSSLCertificateValidation">true</property>
        <property name="authorizationCheckEnabled">true</property>
    </properties>
</plugin>

2. Modifiez également le fichier webapps/camunda/WEB-INF/web.xml et définissez le filtre suivant après l’élément session-config:

<filter>
    <filter-name>KeyCloak OpenID Connect Filter</filter-name>
    <filter-class>org.keycloak.adapters.servlet.KeycloakOIDCFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>KeyCloak OpenID Connect Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>
<!-- Container Based Authentication filter -->
<filter>
    <filter-name>Container Based Authentication Filter</filter-name>
    <filter-class>org.camunda.bpm.webapp.impl.security.auth.ContainerBasedAuthenticationFilter</filter-class>
    <init-param>
        <param-name>authentication-provider</param-name>
        <param-value>org.camunda.community.auth.keycloak.sso.KeycloakSSOAuthenticationProvider</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Container Based Authentication Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

3.Editez les fichiers suivants avec le même contenu et copiez le Secret obtenu lors d’une étape précédente, en plus de l’url Keycloak et du nom du client que nous avons créé:

  • webapps/camunda/WEB-INF/keycloak.json
  • webapps/engine-rest/WEB-INF/keycloak.json
{
  "realm": "Ldap",
  "auth-server-url": "http://localhost:8081/auth",
  "ssl-required": "external",
  "resource": "camunda-id-service",
  "verify-token-audience": true,
  "credentials": {
    "secret": "84d2bfb5-5ced-45de-8123-3a8b5c531248"
  },
  "use-resource-role-mappings": true,
  "confidential-port": 0
}

3. Test d’authentification unique (SSO)

Une fois la configuration terminée, nous ferons un test pour voir si les étapes précédentes sont effectuées correctement:

1.Si nous avons correctement configuré les serveurs et redémarré, lorsque nous accédons à la page Camunda sans être authentifié, il nous redirigera vers la page de Keycloak:

2. Une fois authentifié, nous serons redirigés vers l’application Web Camunda avec la session démarrée:

Si vous souhaitez en savoir plus, n’hésitez pas et contactez-nous pour plus d’informations.