obtener - Asociar usuario Ldap a un grupo con Java
obtener atributos ldap java (4)
El valor del atributo memberOf
es incorrecto. El atributo memberOf
es probablemente un nombre distinguido. Los clientes LDAP deben consultar el esquema (el DN base del cual podría estar disponible en el DSE raíz ) cuando tengan dudas sobre la sintaxis, el ordenamiento o las reglas de coincidencia de un atributo.
Tengo problemas para encontrar cómo asociar un usuario #Ldap a un grupo determinado.
Eso es lo que he intentado:
Attributes attrs = new BasicAttributes();
BasicAttribute basicAttrs = new BasicAttribute("objectclass");
basicAttrs.add("top");
basicAttrs.add("person");
BasicAttribute memberOf = new BasicAttribute("memberOf");
memberOf.add("Managers"); // Tried with distinguished name too
memberOf.add("Administrators"); // Tried with distinguished name too
attrs.put(basicAttrs);
attrs.put("cn", user.getLogin());
attrs.put("name", user.getLogin());
attrs.put("login", user.getLogin());
attrs.put("mail", user.getMail());
attrs.put("displayName", user.getDisplayName());
attrs.put("memberOf", memberOf);
try {
ctx.bind("CN=" + user.getLogin() + "," + baseDn, null, attrs);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
También traté de usar los nombres completos como: "CN = Managers, OU = <system_name>, OU = Users, OU = <server>, DC = com", pero no funcionó. Creo que debería ser un lugar para hacer referencia al grupo Ldap.
Pero tengo este error:
javax.naming.directory.InvalidAttributeValueException: Malformed ''memberOf'' attribute value; remaining name ''CN=lcarvalho,OU=<system_name>,OU=Users,OU=<server>,DC=com''
at com.sun.jndi.ldap.LdapClient.encodeAttribute(LdapClient.java:951)
at com.sun.jndi.ldap.LdapClient.add(LdapClient.java:999)
at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:396)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:277)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:197)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:186)
at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:158)
...
Esta es toda la traza de pila además de mis líneas de aplicación.
Probablemente su DN esté equivocado, porque parece que ha especificado una Unidad organizativa adicional en lugar de un Componente de dominio:
"CN=Managers,OU=<system_name>,OU=Users,OU=<server>,DC=com"
debiera ser:
"cn=Managers,ou=<system_name>,ou=Users,dc=<server>,dc=com"
En LDAP, la estructura del directorio comienza con 2 componentes de dominio, que son un nombre de dominio de empresa inverso (por convención).
Para que su código funcione, debe tener en cuenta lo siguiente:
hay un esquema "Persona" que está cargado en su Servidor LDAP
hay un atributo "MemberOf" definido en su esquema de "Persona"
"MemberOf" requiere DN completo como entrada
También lo aliento a echar un vistazo al SDK LDAP de UnboundID .
Espero que ayude.
Si está utilizando OpenLDAP, el miembro de la superposición mantiene automáticamente el atributo memberOf y su aplicación no debe escribirlo en absoluto. Lo que debe hacer es agregar el DN del usuario al atributo uniqueMember o roleOccupant, etc. del grupo al que se está uniendo. Entonces su DN aparecerá mágicamente en su atributo memberOf.
Yo tuve el mismo problema. Compruebe el tipo de valor de este atributo utilizando cualquier cliente de ldap (por ejemplo: Apache Directory Studio). Si intenta reemplazar el atributo cuyo tipo es Cadena con valor int, arrojará este error.