Microaplicaciones

Configurar proveedores de usuarios

La configuración de proveedores de usuarios aumenta la eficiencia de la administración, ya que elimina la necesidad de replicar y sincronizar los grupos de usuarios creados y mantenidos en los parámetros de configuración de los proveedores de identidades del sistema de registro (SoR).

Los administradores de microaplicaciones pueden configurar proveedores de usuarios para recopilar datos de los usuarios y grupos de usuarios del SoR y utilizar estos datos para administrar las suscripciones a microaplicaciones en todas las integraciones. Para configurar proveedores de usuarios, el SoR de las aplicaciones debe proporcionar API que muestren los usuarios/grupos de usuarios, por ejemplo, ServiceNow, Salesforce, Jira, entre otros.

Crear proveedor de usuarios

Puede crear un nuevo proveedor de usuarios manualmente o importar un proveedor de usuarios que ya esté configurado.

Siga estos pasos:

  1. En la página Integraciones de microaplicaciones, seleccione la ficha Proveedores de usuarios en la barra superior.

    Ficha Proveedores de usuarios

  2. Elija un tipo de proveedor de usuarios. Seleccione Crear un nuevo proveedor de usuarios desde el servicio web HTTP para configurar este proveedor de usuarios manualmente. También puede Importar un proveedor de usuario configurado previamente. Para obtener más información sobre la importación, consulte Importar.
  3. Introduzca un Nombre de proveedor de usuarios para la conexión.
  4. Introduzca la URL base del proveedor de usuarios.
  5. Seleccione un icono para el proveedor de usuarios en la Biblioteca de iconos, o deje el icono predeterminado.
  6. Seleccione el método de Autenticación de servicio y complete todos los detalles necesarios, en función del método de autenticación que utilice. Para obtener más información acerca de los métodos de autenticación, consulte Configurar autenticación del servicio.
  7. (Opcional) Habilite la opción Habilitar la limitación del índice de solicitudes si es necesario e introduzca una Cantidad de solicitudes y un Intervalo de tiempo.
  8. (Opcional) Introduzca un valor para Tiempo de espera de solicitud si es necesario.
  9. Seleccione Agregar para terminar de crear el proveedor de usuarios.

    Pantalla de configuración de proveedores de usuarios

    Importe ahora un script para finalizar.

Importar script

Con la capacidad Script de proveedor de usuarios en Microaplicaciones, debe cargar un script para finalizar la configuración del proveedor de usuarios. A continuación, proporcionamos los requisitos del script y un modelo JavaScript. Consulte Preparar el script. Para obtener información general acerca de los scripts, consulte Scripts de integración HTTP.

Después de agregar el proveedor de usuarios (en el procedimiento anterior), la página se abre con una vista de los proveedores de usuarios. Siga estos pasos para agregar el script.

  1. Seleccione Agregar script en Estado.
  2. Seleccione Importar script.
  3. Arrastre el script a la ventana emergente de importación o busque el archivo. El script debe ser un archivo JS de tamaño no mayor que 1 MB.

    El script se analiza y valida.

  4. Seleccione Importar para finalizar.

    Puede ver los detalles de los scripts en Controladores de scripts, en la vista Script de proveedor de usuarios del proveedor de usuarios. Para ver las solicitudes realizadas por el script, seleccione el menú situado junto a la entrada del proveedor de usuarios y seleccione Registro de sincronización.

El nuevo proveedor de usuarios está ahora disponible al asignar suscriptores. Para obtener más información, consulte Administrar suscriptores.

Proveedor de usuarios en suscripciones

Preparar el script

Al preparar el script, tenga en cuenta los siguientes requisitos:

  • El script de importación debe comenzar cargando la biblioteca integrada “microapp-user-groups”. Esta biblioteca define los objetos que deben almacenarse en la base de datos: const { User, Group, UserGroupMapping } = library.load("microapp-user-groups");
  • Los objetos tienen la siguiente estructura/propiedades:

    • Las direcciones de correo electrónico User(accountName, displayName, email, domain, userPrincipalName, userId) deben ser únicas dentro del proveedor del usuarios
    • La jerarquía de grupos Group(accountName, displayName, domain, userPrincipalName, groupId, parentGroupId) también se define con parentGroupId
    • UserGroupMapping(userId, groupId) asigna usuarios a grupos
  • Todas las propiedades son de tipo de datos STRING.
  • User.email debe coincidir con el correo electrónico de un usuario que haya iniciado sesión en Citrix Workspace.

Script modelo

Utilice el siguiente código JavaScript como modelo.

Nota

El siguiente modelo está escrito específicamente para el SoR de ServiceNow. Este script no es compatible con otros servicios.

    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-->
Configurar proveedores de usuarios