This page describes how to configure the O3 Server to use LDAP or Active Directory as the authentication mechanism.
Basic knowledge of LDAP is required to understand these instructions, as well as basic experience regarding the configuration of the LDAP and Active Directory servers of your choice.
This description includes some examples that serve only as a guide since the strcture of directories may differ depending on the selected LDAP server.
These instructions apply to versions 4.0.400 o higher
O3 Server security
O3 Server Security is based on a module usually known as RBAC (Role Based Access Control).
This module defines a set of repositories that store all elements involved in the security mechanisms of the server (users, roles, attributes, relationships between all of them, etc.).
It is possible to choose among different repository implementations thus allowing data to be stored and retrieved from different servers and using various technologies.
O3 includes an implementation that allows RBAC to connect to directory servers such as LDAP and Active Directory.
Configuring the O3 Server
The specific implementation of RBAC repositories is declared in a file called GServer.properties. This file is located in the folder <O3>/jboss/server/default/ideasoft-o3
This file defines a set of properties that describe the repository and how to access it.
#RBAC Repositories Configuration #rbac.roleRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRoleRepository #rbac.userRepository = com.ideasoft.rbac.repository.impl.jndi.JndiUserRepository #rbac.raAssignmentRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRAAssignmentRepository #rbac.loginService = com.ideasoft.rbac.repository.impl.jndi.JndiLoginService
O3's distribution includes all of these properties commented out, as they can be seen in the previous section with all the lines starting with the hash mark (#). In order to activate the use of LDAP or Active Directory, these characters need to be deleted to look like this:
#RBAC Repositories Configuration rbac.roleRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRoleRepository rbac.userRepository = com.ideasoft.rbac.repository.impl.jndi.JndiUserRepository rbac.raAssignmentRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRAAssignmentRepository rbac.loginService = com.ideasoft.rbac.repository.impl.jndi.JndiLoginService
Nota
Si lo único que se desea es validar los usuarios contra LDAP o Active Directory, teniendo los roles definidos en la base de datos de O3, sólo deberá descomentarse las líneas que especifican el rbac.loginService y rbac.userRepository. Si no se habilita el rbac.userRepository todos los usuarios deberán existir tanto en LDAP como en la base de datos de O3.
Además de habilitar el uso de implementaciones alternativas de los repositorios de RBAC, es necesario configurar una serie de parámetros que cada mecanismo (LDAP o Active Directory) requieren para su correcto funcionamiento.
Estas configuraciones específicas para cada servidor se indican en un archivo adicional que se encuentra en la carpeta <O3>/jboss/server/default/ideasoft-o3/config/rbac
El nombre del archivo de configuración a utilizar se indica también en el GServer.properties que puede encontrarse en la carpeta <O3>/jboss/server/default/ideasoft-o3 mediante la siguiente property:
jndi.cfg.filename = JndiConfiguration-SunONE.properties
La distribución de O3 incluye dos archivos de ejemplo JndiConfiguration-MS.properties y JndiConfiguration-SunONE.properties para Microsoft Active Directory y SunONE Directory Server respectivamente. Al final de este documento se pueden ver estos ejemplos.
Estos archivos definen los siguientes parámetros:
Parámetro |
Descripción |
---|---|
java.naming.provider.url |
Indica la ruta al servidor donde se encuentran los repositorios. Esta ruta es de la forma ldap://<host>:<port> |
java.naming.factory.initial |
Indica el nombre de la clase java que implementa el Contexto Inicial. Este es un parámetro del sistema que no debe cambiarse a menos que se indique lo contrario. El valor por defecto de esta property es "com.sun.jndi.ldap.LdapCtxFactory" |
java.naming.security.authentication |
Indica el mecanismo de autenticación. Este es un parámetro del sistema que no debe cambiarse a menos que se indique lo contrario. El valor por defecto de esta property es "simple" |
browseUserDN |
Distinguished Name del usuario que utiliza el sistema para obtener las listas de usuarios, roles, etc. |
browseUserPassword.plain |
Contraseña del usuario indicado en el parámetro browseUserDN. El valor de esta property se ingresa como texto plano y una vez que el servidor se reinicia ésta es cambiada por la property browseUserPassword cuyo valor será encriptado en forma automática por el servidor |
roleDefAttributeID |
Nombre del atributo que deben tener las entradas en el directorio que representan roles |
roleDefValueAttributeID |
Valor que debe tener el atributo roleDefAttributeID para ser considerado un rol |
roleNameAttributeID |
Atributo que se va a utilizar para recuperar el nombre del rol |
roleSearchBaseDN |
DN a partir del cual se buscarán los roles |
userDefAttributeID |
Nombre del atributo que deben tener las entradas en el directorio que representan usuarios |
userDefValueAttributeID |
Valor que debe tener el atributo userDefAttributeID para ser considerado un usuario |
userNameAttributeID |
Atributo que se va a utilizar para recuperar el nombre del usuario |
userSearchBaseDN |
DN a partir del cual se buscarán los usuarios |
userRolesAttributeID |
Nombre del atributo multivaluado que contiene la lista de los roles que tiene asignado el usuario |
Nota
Para el caso en que la lista de roles indicada por la property userRolesAttributeID sea una lista de DN (Distinguished Name) en lugar de los nombres de los roles directamente, es necesario especificar el atributo dereferenceRoleAttribute, el cual indica el atributo a partir del cual se va a obtener el nombre del rol. En este caso, el valor de dereferenceRoleAttribute y el de roleNameAttributeID deben coincidir para que funcione correctamente la asignación de roles a usuarios.
Nota
Para que la validación de usuarios sea exitosa es necesario que éstos tengan definidos el atributo "dn"
Ejemplos de Archivos de Configuración
Ejemplo de Archivo de configuración para Microsoft Active Directory
#Microsoft - Active Directoy Configuation file java.naming.provider.url = ldap://dataserver:389 userRolesAttributeID = memberOf dereferenceRoleAttribute = cn #Browse user's DN (used to bind to the Directory) #Option 1: User Principal Name (username@domain) #browseUserDN = o3user@radiusserver.ideasoft.com #browseUserPassword.plain = ???????? #Option 2: DN (Distinguished Name) browseUserDN = CN=O3User, OU=People, DC=radiusserver, DC=ideasoft, DC=com browseUserPassword.plain = ???????? #Roles's Entry definition roleDefAttributeID = objectclass roleDefValueAttributeID = group roleNameAttributeID = cn roleSearchBaseDN = ou=Roles, dc=radiusserver, dc=ideasoft, dc=com #User's Entry definition userDefAttributeID = objectclass userDefValueAttributeID = user userNameAttributeID = sAMAccountName userSearchBaseDN = ou=People, dc=radiusserver, dc=ideasoft, dc=com
Ejemplo de Archivo de configuración para SunONE Directory Server
#Sun ONE Directory Server Configuation file java.naming.provider.url = ldap://dataserver:51685 userRolesAttributeID = nsrole dereferenceRoleAttribute = cn #Browse user's DN (used to bind to the Directory) browseUserDN = uid=admin, cn=directory administrators, dc=ideasoft browseUserPassword.plain = ???????? #Roles's Entry definition roleDefAttributeID = objectclass roleDefValueAttributeID = ldapsubentry roleNameAttributeID = cn roleSearchBaseDN = ou=People, dc=ideasoft #User's Entry definition userDefAttributeID = objectclass userDefValueAttributeID = person userNameAttributeID = uid userSearchBaseDN = ou=People, dc=ideasoft