Micro-apps

Configurer les fournisseurs d’utilisateurs

La configuration des fournisseurs d’utilisateurs augmente l’efficacité de l’administration en supprimant le besoin de répliquer et de synchroniser les groupes d’utilisateurs créés et conservés dans les paramètres de configuration des fournisseurs d’identité de votre système d’enregistrement (SoR).

Les administrateurs de micro-apps peuvent configurer les fournisseurs d’utilisateurs pour collecter les données des utilisateurs et des groupes d’utilisateurs à partir de votre système d’enregistrement (SoR), et les utiliser pour gérer les abonnements aux micro-apps dans toutes les intégrations. Pour configurer les fournisseurs d’utilisateurs, le système d’enregistrement lié à votre application doit fournir des API qui exposent les utilisateurs/groupes d’utilisateurs, par exemple, ServiceNow, Salesforce, Jira, etc.

Créer un fournisseur d’utilisateurs

Vous pouvez soit créer un fournisseur d’utilisateurs manuellement, soit importer un fournisseur d’utilisateurs déjà configuré.

Procédez comme suit :

  1. Sur la page Intégrations de micro-apps, sélectionnez l’onglet Fournisseur d’utilisateurs dans la barre supérieure.

    Onglet Fournisseur d'utilisateurs

  2. Choisissez un type de fournisseur d’utilisateurs. Sélectionnez Créer un nouveau fournisseur d’utilisateurs à partir de votre service Web HTTP pour configurer ce fournisseur d’utilisateurs manuellement. Vous pouvez également sélectionner Importer un fournisseur d’utilisateurs précédemment configuré. Pour plus d’informations sur l’importation, consultez la section Importer.
  3. Renseignez le champ Nom du fournisseur d’utilisateur pour la connexion.
  4. Entrez l’URL de base du fournisseur d’utilisateurs.
  5. Sélectionnez une icône pour le fournisseur d’utilisateurs dans la bibliothèque d’icônes ou gardez l’icône par défaut.
  6. Sélectionnez la méthode Service d’authentification et complétez tous les détails requis en fonction de la méthode d’authentification que vous utilisez. Pour plus d’informations sur les méthodes d’authentification, consultez la section Configurer l’authentification de service.
  7. (Facultatif) Activez l’option Activer la limitation du taux de demandes si nécessaire et renseignez les champs Nombre de demandes et Intervalle de temps.
  8. (Facultatif) Entrez une valeur sous Délais d’expiration des demandes si nécessaire.
  9. Sélectionnez Ajouter pour terminer la création du fournisseur d’utilisateurs.

    Écran de configuration des fournisseurs d'utilisateurs

    Vous importez maintenant un script pour terminer.

Importer un script

À l’aide de la fonctionnalité Script du fournisseur d’utilisateurs dans les micro-apps, vous devez charger un script pour terminer la configuration du fournisseur d’utilisateurs. Nous avons fourni des exigences en matière de script et un modèle JavaScript ci-dessous. Consultez la section Préparer votre script. Pour plus d’informations générales sur les scripts, consultez la section Script d’intégration HTTP.

Après avoir ajouté le fournisseur d’utilisateurs (procédure précédente), la page s’ouvre avec une vue de vos fournisseurs d’utilisateurs. Suivez ces étapes pour ajouter le script.

  1. Sélectionnez Ajouter un script sous État.
  2. Sélectionnez Importer un script.
  3. Faites glisser votre script sur la fenêtre contextuelle d’importation ou recherchez le fichier. Le script doit être un fichier .js ne dépassant pas 1 Mo.

    Le script est analysé et validé.

  4. Sélectionnez Importer pour terminer le processus.

    Vous pouvez afficher les détails des scripts sous Gestionnaires de script dans la vue Script du fournisseur d’utilisateurs associée au fournisseur utilisateur. Pour voir les demandes effectuées par le script, sélectionnez le menu en regard de l’entrée du fournisseur d’utilisateurs et sélectionnez Journal de synchronisation.

Votre nouveau fournisseur d’utilisateurs est désormais disponible lorsque vous attribuez des abonnés. Pour plus d’informations, consultez la section Gérer des abonnés.

Fournisseur d'utilisateurs dans les abonnements

Préparer votre script

Lorsque vous préparez votre script, tenez compte des exigences suivantes :

  • Le script d’importation doit commencer par charger les groupes d’utilisateurs de micro-apps intégrés de la bibliothèque. Cette bibliothèque définit les objets qui doivent être stockés dans la base de données : const { User, Group, UserGroupMapping } = library.load("microapp-user-groups");
  • Les objets ont la structure/les propriétés suivantes :

    • User(accountName, displayName, email, domain, userPrincipalName, userId) : les adresses e-mail doivent être uniques au sein du fournisseur d’utilisateurs.
    • Group(accountName, displayName, domain, userPrincipalName, groupId, parentGroupId) : la hiérarchie des groupes est également définie à l’aide de l’élément parentGroupId.
    • UserGroupMapping(userId, groupId) : cette propriété mappe les utilisateurs à des groupes.
  • Toutes les propriétés sont des type données STRING.
  • La propriété user.email doit correspondre à l’e-mail d’un utilisateur connecté à Citrix Workspace.

Script de modèle

Utilisez le code JavaScript suivant comme modèle.

Remarque

Le modèle suivant est écrit spécifiquement pour le système d’enregistrement (SoR) ServiceNow. Ce script n’est pas compatible avec d’autres services.

    const { User, Group, UserGroupMapping } = library.load("microapp-user-groups");

    function fullSync(params) {
      fullSyncUsers(params);
      fullSyncGroups(params);
      fullSyncUserGroupMapping(params);
    }

    function fullSyncUsers({ client, dataStore }) {
      let offset = 0;
      do {
        const response = client.fetchSync(
          `/api/now/table/sys_user?sysparm_fields=sys_domain_path%2Cname%2C%20sys_id%2Cuser_name%2Cemail&sysparm_query=emailISNOTEMPTY^active%3Dtrue&sysparm_limit=100&sysparm_offset=${offset}`
        );
        if (!response.ok) {
          console.log("Error status:", response.status, response.statusText);
          console.log("Error body:", response.textSync());
          throw new Error("Network response was not ok");
        }
        console.log("fetch done");

        const users = response.jsonSync().result;
        console.log("users");

        users.map((user) =>
          console.log(
            user.user_name,
            user.name,
            user.email,
            user.sys_domain_path,
            user.name,
            user.sys_id
          )
        );
        dataStore.save(
          User.tableModel,
          users.map(
            (user) =>
              new User(
                user.user_name,
                user.name,
                user.email,
                user.sys_domain_path,
                user.user_name,
                user.sys_id
              )
          )
        );

        offset = offset + 100;
        console.log(`offset: ${offset}`);
      } while (offset < 300);
    }

    function fullSyncGroups({ client, dataStore }) {
      let offset = 0;
      do {
        const response = client.fetchSync(
          `/api/now/table/sys_user_group?sysparm_query=active%3Dtrue&sysparm_limit=100&sysparm_offset=${offset}`
        );
        if (!response.ok) {
          console.log("Error status:", response.status, response.statusText);
          console.log("Error body:", response.textSync());
          throw new Error("Network response was not ok");
        }

        const groups = response.jsonSync().result;
        groups.map((group) =>
          console.log(
            group.name,
            group.name,
            "/",
            group.name,
            group.sys_id,
            group.parent.value
          )
        );
        dataStore.save(
          Group.tableModel,
          groups.map(
            (group) =>
              new Group(
                group.name,
                group.name,
                "/",
                group.name,
                group.sys_id,
                group.parent.value
              )
          )
        );
        offset = offset + 100;
        console.log(`offset: ${offset}`);
      } while (offset < 400);
    }

    function fullSyncUserGroupMapping({ client, dataStore }) {
      let offset = 0;
      do {
        const response = client.fetchSync(
          `/api/now/table/sys_user_grmember?&sysparm_limit=100&sysparm_offset=${offset}`
        );
        if (!response.ok) {
          console.log("Error status:", response.status, response.statusText);
          console.log("Error body:", response.textSync());
          throw new Error("Network response was not ok");
        }

        const mappings = response.jsonSync().result;
        mappings.map((mapping) =>
          console.log(mapping.user.value, mapping.group.value)
        );
        dataStore.save(
          UserGroupMapping.tableModel,
          mappings.map(
            (mapping) =>
              new UserGroupMapping(mapping.user.value, mapping.group.value)
          )
        );
        offset = offset + 100;
        console.log(`offset: ${offset}`);
      } while (offset < 400);
    }

    integration.define({
      synchronizations: [
        {
          name: "snowUserGroups", // Logical name
          fullSyncFunction: fullSync,
        },
      ],
      model: {
        tables: [User.tableModel, Group.tableModel, UserGroupMapping.tableModel],
      },
    });
<!--NeedCopy-->
Configurer les fournisseurs d’utilisateurs