java ldap rbac apacheds

java - Implementación de seguridad basada en roles en LDAP



rbac apacheds (3)

Estoy trabajando en la implementación de seguridad basada en roles en LDAP y Java. Específicamente, tengo los siguientes objetos que necesito representar en LDAP:

  • Usuarios
  • Grupos corporativos de usuarios: recursos humanos, finanzas, etc.
  • Permisos - DOCUMENT_READ, DOCUMENT_MODIFY etc.
  • Roles - ADMIN, INVITADO, etc.

Los roles son básicamente grupos de permisos y se pueden asignar a un usuario o a un grupo de usuarios.

Estaba pensando en representarlos en LDAP como sigue:

  • Usuarios: clases Person y uidObject con el atributo userPassword.
  • Grupos de usuarios: clase organizationalUnit, en la que se encuentran los usuarios.
  • Roles - clase de objeto groupOfNames.
  • Permisos: no estoy seguro de esta, quizás también de la clase groupOfNames.

La idea es tener un acceso rápido de un usuario o grupo a una lista de roles que este usuario o grupo tenga. Sé que puedo poner usuarios y grupos en los atributos de "miembro" de un rol, pero luego tendré que analizar todos los roles para encontrar cuáles tienen este usuario en la lista. ¿Hay alguna manera de tener algo como el atributo "miembro" en un objeto Persona?

En general, ¿alguien sabe de una buena implementación de seguridad basada en roles en LDAP? No pude encontrar buena documentación o tutoriales sobre este tema. Estoy usando ApacheDS como un servidor LDAP actualmente, pero estoy abierto a sugerencias.


Usuarios: inetOrgPerson

Colecciones: organizationalUnit, pero ten cuidado de tratar de replicar tu estructura organizativa en tu directorio LDAP: esto suele ser un error, ya que las organizaciones cambian y los usuarios se mueven por la organización. Debería considerar usar el atributo ou.

Roles: organizationalRole. Usé grupos de roles como groupOfUniqueNames, pero eso fue un error, debería haber seguido usando organizationalRole para que los roles sean simplemente recursivos.

Permiso: esto es solo un rol realmente, o un atributo de un rol. Si usa CMA, están definidos en web.xml, no LDAP.

Como dije, no intente hacer que su árbol LDAP refleje su organización. Haz que refleje su propia organización. Utilizo atributos de múltiples valores cuando sea necesario. Utilizo organizationalUnit principalmente para capas dentro de LDAP, o donde he roto mis reglas anteriormente ;-)

OpenLDAP tiene una superposición de integridad referencial que puede mantener mucho de esto directo para usted.

Hay algunos consejos muy buenos sobre la estructura de LDAP en Mastering OpenLDAP de Matt Butcher, y una visión de alto nivel de todo esto en Understanding and Deploying LDAP Directory Services de Howes et al.


Echa un vistazo a Fortaleza. Cumple con ANSI RBAC INCITS 359 y está basado en LDAP. El código fuente es de código abierto y puede desplegar los binarios preintegrados que incluyen OpenLDAP desde aquí: http://iamfortress.org/


Una opción más: verifique el control de acceso basado en atributos ( abac ). ABAC es una evolución de RBAC. Utiliza atributos (que son etiquetas sobre el usuario, el recurso, el contexto) y políticas para determinar qué está permitido y qué no.

Ejemplo: Un usuario con el rol == administrador en el departamento == ventas puede hacer la acción == editar en un documento de tipo == orden de compra si el monto de la PO <= el límite de aprobación del usuario.

Puede leer más sobre ABAC en el sitio web de NIST .