Introducción
Uno de los retos a los que se enfrenta una empresa es gestionar la base de usuarios de sus sistemas de forma orquestada y segura. Muchos sistemas implementan la compatibilidad con plataformas estándar como Azure, AWS o Google para permitir una interacción fluida con esos sistemas proporcionando funciones como el inicio de sesión único (SSO).
Acumatica hasta ahora sólo proporciona soporte integrado para Microsoft Active Directory / Federation Services y Azure Active Directory. Además, proporcionan capacidades de inicio de sesión único con cuentas de Google y Microsoft, así como OneLogin a través de proveedores de Open ID. Particularmente con Google, presentaré una forma de ampliar esta capacidad y también proporcionar integración de la base de usuarios, permitiendo a los administradores crear, activar y desactivar usuarios de Acumatica desde Google Workspace.
Inicio de sesión único de Acumatica con Google (SSO)
Para activar el SSO, vaya a la opción de menú Gestión del sistema > Activar/Desactivar características. A continuación, busque y configure la opción de función correspondiente:
Una vez activada, en la página de inicio de sesión aparecerá la opción de Google para permitir el acceso a Acumatica con un solo inicio de sesión.
Acumatica permite la autoinscripción en SSO a través de la opción MI PERFIL
A continuación, ve a Identidades externas, selecciona Google y haz clic en USUARIO ASOCIADO.
El proceso de autenticación va a Google utilizando el "actual" sesión de usuario con Google Workspace. Una vez completado, el ID de cuenta se establece como identificador de la identidad especificada:
Este ID de cuenta (clave de usuario) se utiliza para identificar la sesión de Google actual del usuario al autenticarse con Google durante el proceso de un clic.
Este mecanismo sólo está disponible para el usuario normal. No está disponible para un administrador, lo que significa que no hay forma de asignar una identidad de Google a un usuario distinto del usuario actual. También es necesario tener el correo electrónico del usuario definido como parte del directorio de Google específico.
Este artículo presenta una alternativa para ampliar esta capacidad mediante
- Tener la capacidad de definir usuarios en Google y luego crearlos automáticamente en Acumatica con su conjunto de Google Identity.
- Permite que un administrador asigne una Google Identity específica a un usuario sin necesidad de autenticarse mediante 2FA.
Configuración de los requisitos de Visual Studio y Google
Lo primero es lo primero. ¿Cómo me conecto a Google? Para esta implementación he utilizado bibliotecas NuGet existentes proporcionadas por Google:
Lista NuGet. Esta implementación utiliza la versión 1.49.
Al añadir estas bibliotecas, se dispone de un conjunto de clases para implementar llamadas RESTAPI de forma amigable.
En segundo lugar, hay una lista de requisitos por parte de Google para permitir la integración de Acumatica con Google Workspace:
- Crear una cuenta de servicio
Pantalla Cuenta de servicio de Google
- Crear un archivo de clave privada para la cuenta de servicio. Soporté ambos formatos JSON y P12 (X.509 backward compatibility). El archivo se crea una vez para la descarga. Después de eso, no hay opción para volver a crearlo.
- Cree un grupo de espacios de trabajo. El objetivo es sincronizar los usuarios de Google que pertenezcan a este grupo. Cualquier otro usuario será ignorado.
- Designe una cuenta de acceso. Se utilizará para consultar el Directorio de Google
Almacenamiento de archivos de claves privadas en Acumatica
Podría pensar en cargar el archivo en Acumatica y ya está. Así es, pero necesito tener el control del archivo porque es necesario para interactuar con los puntos finales de Google Workspace. Para ello, todos los parámetros obligatorios y opcionales descritos anteriormente, además del archivo de clave privada, deben almacenarse en Acumatica a través de una pantalla de configuración.
Para restringir el acceso a la opción Archivos en la pantalla, sólo necesito establecer la siguiente opción como false:
Para implementar una carga controlada del archivo, se añade un panel de carga a la pantalla:
GIST: https://gist.github.com/tac-ljustiniano/74bfe34432846dea1815d89d44a76380
Conexión a Google
Para conectarse a Google Workspace es necesario especificar el ámbito de acceso. Dado que Google es la fuente de verdad para la creación de usuarios, sólo necesito acceso de sólo lectura a usuarios y grupos. Google proporciona varias opciones a través de la clase DirectoryService.Scope. El resto es utilizar los datos del archivo Private Key para la conexión.
GIST: https://gist.github.com/tac-ljustiniano/69a374543c953d0206078dc22d094d22
Recuperación de usuarios
Hay 2 lugares de verificación para los usuarios:
1. Grupo específico de usuarios de Google. Uno de los requisitos opcionales es la definición de un grupo en el Directorio de Google. Al tener un grupo la administración de usuarios se facilita con solo asignar los usuarios de Google que se crearán en Acumatica a ese grupo específico. La definición de la URL del grupo es un parámetro de configuración.
Para recuperar la lista de miembros del grupo utilizo la clase MembersResource.ListRequest:
GIST: https://gist.github.com/tac-ljustiniano/a5962defd78ba5c4b41da107028c900f
2. Directorio de usuarios global. Abarca todas las cuentas de Google. Si no se especifica ningún grupo, no hay otra opción que sincronizar contra él.
Para recuperar la lista de usuarios del directorio global de Google utilizo la clase UsersResource.ListRequest:
GIST: https://gist.github.com/tac-ljustiniano/27bfcd08a3b7e3c6f8ed975ae7068638
La paginación es necesaria ya que, por diseño, la API de Google entrega un subconjunto de registros por solicitud. También se puede realizar una consulta de usuario único utilizando el correo electrónico principal como clave.
Sincronización de usuarios de Acumatica
Al ampliar la pantalla Usuarios para añadir una acción que asocie el usuario seleccionado a una cuenta del directorio de Google, el usuario seleccionado se sincronizará con el directorio de Google cuando se invoque la acción. Dicha acción se sitúa en el contexto de IDENTIDADES EXTERNAS
GIST: https://gist.github.com/tac-ljustiniano/76d8930ee0b2d849fc8077fa8159b5b8
Una versión más extendida para crear, actualizar o deshabilitar usuarios se crea para procesar la lista de usuarios en Acumatica de acuerdo a un criterio, usando el email del usuario (email primario) como clave:
user@domain.com
La parte "usuario" se convertirá en el login de Acumatica.
Sería necesario procesar una pantalla que invoque este proceso para programar ese proceso de sincronización y tenerlo desatendido.
Conclusión
Utilizando la API de Google y configurando las cuentas de acceso adecuadas para el espacio de trabajo de Google, los administradores tienen la capacidad de sincronizar la información de SSO para diferentes usuarios. Además, se puede utilizar el proceso de sincronización programada para tener una administración desatendida de los usuarios en Acumatica. Los departamentos de TI solo tienen que asignar usuarios a un grupo especial y se crearán en Acumatica. Todavía se necesita más trabajo para ampliar el alcance hacia Acumatica Roles. Actualmente esta implementación crea los usuarios con acceso básico en Acumatica. Aún se deben otorgar permisos adicionales para permitir que esos usuarios interactúen con sus respectivos módulos.
¡Feliz codificación!