martes, 14 de enero de 2014

WSO2 con múltiples almacenes de usuarios.
























Un requerimiento altamente pedido en cualquier solución que se encargue de gestionar identidades es la de soportar múltiples almacenes de usuarios.

WSO2 ha incorporado esta funcionalidad desde hace un tiempo y en esta entrada quiero mostrarles lo fácil que es de configurar.

Los prerrequisitos son los siguientes:

  1. Contar con una BD que almacene los usuarios y roles, o con un LDAP que gestione las identidades. En esta entrada estaremos usando un LDAP.
  2. Usar alguna de las herramientas de WSO2 que soporte  la funcionalidad de múltiples almacenes. En esta entrada estaremos usando el WSO2 ESB v.4.8.0
 Paso 1: crear el almacén de usuarios.
Luego de iniciar el ESB de WSO2 vamos a la opción Home> Configure > User Store Management.




















Ahí damos clic en “Add Secoondary User Store” y vamos a esta página.


Como ven de momento se soportan almacenes de usuario para Active Directory, LDAP y para BD.
Seleccionamos la última opción pues usaremos un LDAP legado que en este caso tiene los usuarios pero no los grupos o roles.

Como se puede apreciar debemos llenar los campos para:

  1. Establecer el nombre de usuario con el que se accederá al LDAP, en nuestro caso será un usuario impersonal con permiso de lectura.
  2. Establecer la URL de acceso al LDAP.
  3. Establecer la contraseña de acceso para el usuario impersonal.
  4. Establecer la base a partir de la cual se realizarán todas las búsquedas de los usuarios. Mientras más general sea más usuarios se encontrarán pero mayor será el tiempo de búsqueda dentro del LDAP.
  5. Establecer el criterio de filtrado.
  6. Establecer el atributo a partir del cual se buscará un usuario en específico. Esto sirve para la autenticación de los usuarios pues este será el atributo usado como usuario.
Establecer el criterio de filtrado para un usuario en particular.
Definir si será un almacén de solo lectura o no.

Si el LDAP que están usando permite la escritura pues habrá otras opciones a incluir o si ya tienen los grupos creados igual, pero con esto basta de momento.

Ahora le damos al botón “Add” y listo. Veremos este mensaje y luego de unos segundos ya tendremos nuestro almacén creado.

Paso 2: buscar usuarios y gestionar roles.

Cuando el almacén es creado tiene este aspecto.


Lo cual nos permite editarlo, deshabilitarlo o borrarlo según nuestras necesidades.

Si vamos ahora a la opción Home > Configure> Users and Roles> Users veremos  algo como lo siguiente:


Vean que se puede seleccionar el dominio para buscar los usuarios o establecer algún tipo de patrón para filtrar los usuarios. En cualquier caso se les mostrará una tabla con los usuarios encontrados y con facilidades para cambiar la contraseña, asignarle roles o ver los roles que posee.



Para el caso de los ldap de solo lectura si queremos usar sus usuario debemos configurar roles internos, ya que no podemos crear roles(grupos) en el ldap ni usar los roles del almacén primario. Para hacerlo vamos a la opción Home> Configure > Users and Roles> Roles y creamos un rol nuevo dando clic en “Add New Internal Role” y para ello pueden ver esta secuencia de imágenes.


Luego damos “Finish” y listo.

De esta manera hemos creado un nuevo rol con todos los privilegios y le hemos asignado un usuario del almacén de usuarios secundario, con lo cual ya este usuario podrá autenticarse en el sistema. Y esto será en el paso 3.

Paso 3: autenticar al usuario en el sistema.

Luego de salir de usuario admin por defecto entramos con el usuario del LDAP y con el rol admin_interno.


Igual pueden autenticarse con LDAP/jorgeio en caso de que este usuario esté en más de un almacén.
La confirmación la podemos ver desde la UI o desde la consola.



Y eso es todo. En unos pasos bien sencillos hemos podido configurar una herramienta de WSO2 para un almacén de datos secundario.

Espero les sea de utilidad.

4 comentarios:

  1. Perfecto es cierto que mejoraron muchisimo con esta configuración visual, porque antes para poder configurarlo habia que estar editando manualmente el xml y lo otro es que no soportaba almacenes multiples. Muy buen post

    ResponderEliminar
  2. Muy buen tutorial, pero como defines los demás almacenes y que si no encuentra ese usuario en el primer almacén vaya a buscarlo al segundo?

    ResponderEliminar
  3. Según la documentación puedes usar un usuario con solo su nombre o poniendolo de la siguiente manera [dominio]\[usuario] si lo especificas así debe buscarte un usuario de ese dominio, pero si pones solo el nombre buscará en cada almacén, el problema aquí es que si la contraseña no se corresponde con el usuario del primer almacén entonces fallará la autenticación.

    Para definir los demás almacenes es igual a como se hace en este que documento

    ResponderEliminar
  4. Jorge, muy bueno el ejemplo. Podras indicar como se hace sin LDAP, o sea, contra una base de datos por JDBC, adaptando los queries.

    ResponderEliminar