Ejemplo de OpenLDAP con URL base en el login
Estructura LDAP
Sección titulada «Estructura LDAP»dc=com dc=some ou=organization cn=ROLE_ADMIN memberUid=okmAdmin memberUid=user1 memberUid=user2 cn=ROLE_USER memberUid=user3 memberUid=user4 ... ou=organization uid=user1 mail=user@mail.com cn=User Name 1 uid=user2 mail=user2@mail.com cn=User Name 3 uid=user3 mail=user3@mail.com cn=User Name 3 uid=user4 mail=user4@mail.com cn=User Name 4Roles válidos:
- cn=ROLE_X,ou=roles,dc=some,dc=com
- cn=ROLE_Y,ou=dept marketing,ou=roles,dc=some,dc=com
- cn=ROLE_Z,ou=dept sales,ou=roles,dc=some,dc=com
Roles no válidos:
- cn=ROLE_INVALID,ou=dept,dc=some,dc=com (cualquier nombre distinguido no incluido en ou=roles,dc=some,dc=com)
Usuarios válidos:
- uid=USER_X,ou=organization,dc=some,dc=com
- uid=USER_Y,ou=dept id,ou=organization,dc=some,dc=com
- uid=USER_Z,ou=dept administrator,ou=organization,dc=some,dc=com
Usuarios no válidos:
- uid=USER_INVALID,ou=house,dc=some,dc=com (cualquier nombre distinguido no incluido en ou=organization,dc=some,dc=com)
Paso 1 - parámetros de configuración
Sección titulada «Paso 1 - parámetros de configuración»Vaya a Administration > Configuration parameters:
| Campo / Propiedad | Tipo | Descripción |
|---|---|---|
| principal.adapter | String | El parámetro está obsoleto desde la versión 8.1.12 com.openkm.principal.LdapPrincipalAdapter |
| system.login.lowercase | String | false |
| principal.ldap.server | String | ldap://192.168.xxx.xxx:389 |
| principal.ldap.security.principal | String | cn=Manager,dc=some,dc=com |
| principal.ldap.security.credentials | String | password |
| principal.ldap.referral | String | |
| principal.ldap.users.from.roles | Boolean | false |
| principal.ldap.user.attribute | String | uid |
| principal.ldap.user.search.base | List | ou=users,dc=some,dc=com |
| principal.ldap.user.search.filter | String | (objectClass=inetOrgPerson) |
| principal.ldap.username.attribute | String | cn |
| principal.ldap.username.search.base | String | ou=users,dc=some,dc=com |
| principal.ldap.username.search.filter | String | (uid={0}) |
| principal.ldap.mail.attribute | String | |
| principal.ldap.mail.search.base | String | dc=some,dc=com |
| principal.ldap.mail.search.filter | String | (uid={0}) |
| principal.ldap.role.attribute | String | cn |
| principal.ldap.role.search.base | List | ou=roles,dc=some,dc=com |
| principal.ldap.role.search.filter | String | (objectClass=posixGroup) |
| principal.ldap.roles.by.user.attribute | String | cn |
| principal.ldap.roles.by.user.search.base | String | ou=roles,dc=some,dc=com |
| principal.ldap.roles.by.user.search.filter | String | (memberUid={0}) |
| principal.ldap.users.by.role.attribute | String | memberUid |
| principal.ldap.users.by.role.search.base | String | ou=roles,dc=some,dc=com |
| principal.ldap.users.by.role.search.filter | String | (&(objectClass=posixGroup)(cn={0})) |
Paso 2 - configurar el login
Sección titulada «Paso 2 - configurar el login»- Importante: el login (ldap://192.168.0.13:389/dc=some,dc=com) establece las consultas de filtro base por defecto en dc=some,dc=com, que se concatena por defecto en todas las consultas de filtro.
- La base de filtro de roles (grupos) es ou=roles (el nombre distinguido real es ou=roles,dc=some,dc=com). Cualquier rol válido debe tenerlo como padre. ou=roles”/> apunta realmente a ou=roles,dc=some,dc=com”/>
- La base de filtro de usuarios es ou=organization (el nombre distinguido real es ou=organization,dc=some,dc=com). Cualquier usuario válido debe tenerlo como padre.
- El filtro de usuario es uid={0}
- Finalmente, tenga en cuenta el valor 1 en memberUid={1}.
Aplique los cambios en el fichero openkm.properties.
El parámetro “okm.authentication.database” se usa para deshabilitar el login por base de datos.
El parámetro “okm.authentication.ldap” se usa para habilitar el login por LDAP.
#Authenticationokm.authentication.database=falseokm.authentication.ldap=true
#LDAPldap.server=ldap://192.168.0.13ldap.manager.distinguished.name=CN=Administrator,CN=Users,DC=openkm,DC=localldap.manager.password=*secret*ldap.base=DC=openkm,DC=localldap.role.attribute=cnldap.user.search.filter=uuid={0}ldap.role.search.filter=memberUid={1}Otra opción para configurar el login
Sección titulada «Otra opción para configurar el login»En algunos casos, puede interesarle establecer la configuración en el fichero openkm.xml; consulte la sección de documentación Configuring openkm.xml para más información.
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns:beans="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="ldapAuthProvider" /> </security:authentication-manager>
<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <beans:constructor-arg value="ldap://192.168.0.13:389/dc=some,dc=com"/> <beans:property name="userDn" value="cn=Manager,dc=some,dc=com"/> <beans:property name="password" value="******"/> </beans:bean>
<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="contextSource"/> <beans:property name="userSearch" ref="userSearch"></beans:property> </beans:bean> </beans:constructor-arg> <beans:constructor-arg name="authoritiesPopulator" ref="defaultLdapAuthoritiesPopulator"/> </beans:bean>
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> <beans:constructor-arg index="0" value="ou=organization" /> <beans:constructor-arg index="1" value="uid={0}" /> <beans:constructor-arg index="2" ref="contextSource" /> <beans:property name="searchSubtree" value="true" /> </beans:bean>
<beans:bean id="defaultLdapAuthoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> <beans:constructor-arg ref="contextSource"/> <beans:constructor-arg value="ou=roles"/> <beans:property name="groupSearchFilter" value="memberUid={1}"/> <beans:property name="groupRoleAttribute" value="cn"/> <beans:property name="searchSubtree" value="true" /> <beans:property name="convertToUpperCase" value="true" /> <beans:property name="rolePrefix" value="" /> </beans:bean>
<!--Needed for remember-me services --> <beans:bean id="userDetailService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> <beans:constructor-arg ref="userSearch"/> <beans:constructor-arg ref="defaultLdapAuthoritiesPopulator"/> </beans:bean>
</beans:beans>