Crear Usuarios en Gsuite desde Node

crear_usuarios_gsuite_feature_image

¿Necesitas automatizar la creación de usuarios en Gsuite?, si tienes un proceso en tu negocio como nuevos empleados, nuevos asistentes, nuevos registros, nuevos estudiantes aquí verás como asignarles su correo empresarial.

directorio de usuarios de gsuite

Una de las partes importantes en todo el conjunto de servicios que nos brinda Gsuite es el de directorio en el cual nos permite gestionar usuarios, grupos de usuarios, miembros de grupos de usuarios, unidades educativas, etc. En este caso nos enfocaremos a los usuarios como requisitos para continuar necesitamos:

NodeJS versión 10 o superior.

– Acceso administrador a Gsuite.

– Acceso a Worskpace de google o GCP.

Una explicación de como crear nuestra primera aplicación en NodeJS pueden guiarse en este post ahí seguiremos hasta instalar las librerías de google.

Creando cuenta de servicio

Comencemos creando nuestra cuenta de servicio, esto es necesario realizarlo para no solicitar permisos de acceso para utilizar la api de Google y ejecutarla desde cualquier servidor que no posea un diseño Front.

crear_usuarios_gsuite_cuenta_servicios_lateral

Presionamos en el botón de crear nueva cuenta de servicio nos mostrará la imagen siguiente en la cual nos solicitar un nombre para la cuenta y una descripción que es lo mas importante para el ejemplo en el caso de otorgar permisos al proyecto o acceso a otros usuarios a manejar la cuenta se lo puede hacer después para la guía no es necesario.

crear_usuarios_gsuite_crear_cuenta_servicio

Una vez creada la cuenta nos mostrará un menú superior, vamos a la pestaña de detalles y luego a la opción Habilitar la delegación de Google Workspace en todo el dominio.

Guardamos el ID de Cliente que se nos habilita lo usaremos luego el momento de dar permisos en el gsuite.

crear_usuarios_gsuite_habilitar_delegacion_google

Ahora vamos a la pestaña claves y aquí a la opción crear nueva clave nos mostrará una pantalla con la opción de descargar un JSON, lo descargamos y lo guardamos en nuestro directorio del proyecto.

crear_usuarios_gsuite_crear_nueva_clave
crear_usuarios_gsuite_descargar_nueva_clave

Ahora nos dirigimos a la pestaña IAM y vamos a ver que nuestro usuario tenga agregada la función de Creador de tokens de cuenta de servicio

crear_usuarios_gsuite_creador_de_token_cuenta_servicio

AGREGANDO PERMISOS A LA CUENTA DESDE GSUITE

Vamos a dirigirnos a la pantalla de administración del Gsuite para dar permisos a nuestra cuenta de servicio con el Id de Cliente que copiamos anteriormente, presionemos entonces en Seguridad – Controles de Api.

crear_usuarios_gsuite_controles_api

Luego presionemos en la opción Administra el acceso de apps de terceros.

crear_usuarios_gsuite_acceso_app_terceros

Seleccionamos configurar una nueva app y en las opciones que sea por ID de Cliente que es el que tenemos anteriormente.

crear_usuarios_gsuite_nueva_app

Una vez ingresado el ID del cliente nos mostrará el proyecto del cual es y nos pedirá seleccionar si le damos accesos en este caso le agregamos y finalmente ya agregada la cuenta nos regresamos a la pantalla Controles de API para darle permisos esto lo hacemos presionando en la opción inferior de Administrar la delegación de todo el dominio.

crear_usuarios_gsuite_administrar_delegacion_dominio

Presionamos editar sobre el nombre o ID de nuestra cuenta y vamos a agregar los siguientes alcances.

https://www.googleapis.com/auth/admin.directory.user
https://www.googleapis.com/auth/admin.directory.group

Listo con esto tenemos configurado los permisos para que nuestra cuenta de servicio pueda acceder mediante api al directorio de Gsuite.

Listando usuarios

Una vez configurado todo vamos a nuestro proyecto y vamos a colocar el siguiente código que nos permitirá realizar la autenticación y leer los 10 primeros correos que existe en nuestra cuenta.

Importamos las librerías necesarias.

const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');var CryptoJS = require("crypto-js");

Realizamos la autenticación aquí es donde utilizaremos el JSON con las claves descargado y también necesitamos el nombre administrador del gsuite.

const auth = new google.auth.GoogleAuth({
    keyFile: 'claves_descargadas.json',
    scopes: ['https://www.googleapis.com/auth/admin.directory.user','https://www.googleapis.com/auth/admin.directory.group'],
    clientOptions: { subject: 'admin@gsuite' },    
  });

Ahora vamos a realizar la lectura de los 10 primeros correos que tiene la cuenta con la siguiente función.

function listUsers(auth) {
  const service = google.admin({version: 'directory_v1', auth});
  service.users.list({
    customer: 'my_customer',
    maxResults: 10,
    orderBy: 'email',
    domain: 'dominio_principal',
  }, (err, res) => {
    if (err) return console.error('The API returned an error:', err);

    const users = res.data.users;
    if (users.length) {
      console.log('Users:');
      users.forEach((user) => {
        console.log(`${user.primaryEmail} (${user.name.fullName})`);
      });
    } else {
      console.log('No users found.');
    }
  });
}  

Ahora llamamos a la función y enviamos como parámetro la constante de autenticación auth:

listUsers(auth);

Ejecutamos nuestro proyecto con node index.js y listo nos devolverá los 10 primeros correos de nuestra cuenta gsuite.

AGREGANDO USUARIOS

Ahora agreguemos el usuario el código anterior nos sirve lo que vamos a aumentar es un objeto para nuevo usuario una constante mejor dicho y una función. El objeto sería:

var nuevo_usuario =  {
    "primaryEmail": "correo_principal_a_crear",
    "name": {
     "givenName": "Elizabeth",
     "familyName": "Smith"
    },
    "suspended": false,
    "password": "password",
    "hashFunction": "MD5",
    "changePasswordAtNextLogin": false,
    "ipWhitelisted": false,
    "ims": [
     {
      "type": "work",
      "protocol": "gtalk",
      "im": "liz_im@talk.example.com",
      "primary": true
     }
    ],
    "emails": [
     {
      "address": "personal@hotmail.com",
      "type": "home",
      "customType": "",
      "primary": true
     }
    ],
    "addresses": [
     {
      "type": "work",
      "customType": "",
      "streetAddress": "1600 Amphitheatre Parkway",
      "locality": "Mountain View",
      "region": "CA",
      "postalCode": "94043"
     }
    ],
    "externalIds": [
     {
      "value": "12345",
      "type": "custom",
      "customType": "employee"
     }
    ],
    "relations": [
     {
      "value": "Mom",
      "type": "mother",
      "customType": ""
     },
     {
      "value": "manager",
      "type": "referred_by",
      "customType": ""
     }
    ],
    "organizations": [
     {
      "name": "Google Inc.",
      "title": "SWE",
      "primary": true,
      "type": "work",
      "description": "Software engineer"
     }
    ],
    "phones": [
     {
      "value": "+593992727390",
      "type": "work"
     }
    ],
    "orgUnitPath": "/",
    "includeInGlobalAddressList": true
}

Listo ahora agreguemos la función:

function newUser(auth,user) {
    var passhash = CryptoJS.MD5(user.password).toString(); //Convertimos el pass en MD5
    user.password=passhash;
    console.log(user.password);
    console.log(JSON.stringify(user));
    const service = google.admin({version: 'directory_v1', auth});
    service.users.insert({
      auth: auth,
      resource: user,
      domain: 'dominio_principal',
    }, function(err, event) {
      if (err) {
        console.log('There was an error creating user gsuite: ' + err);
        return;
      }
      console.log('User created: %s', JSON.stringify(event));
    });
 }

Con eso ya podemos comentar la llamada a listar usuarios y podemos llamar a la función newUser:

newUser(auth,nuevo_usuario);

Listo con eso ya tenemos agregado un nuevo usuario en nuestro conjunto de usuarios del Gsuite, si necesitas soporte sobre integraciones no dudes en contactarnos podemos analizar tu requerimiento SIN COSTO, y no olvides suscribirte a nuestro Boletín tenemos temas muy interesantes.