Configuración mixta de Active Directory con LDAP sincronizado
El objetivo de este tipo de configuración es autenticar contra Active Directory y, al mismo tiempo, obtener roles, nombres de usuario y direcciones de correo desde la base de datos. Cuando esta configuración está habilitada, una tarea crontab llamada “Sync LDAP users” sincroniza periódicamente los datos de los usuarios de Active Directory (nombre de usuario, direcciones de correo) en la base de datos de OpenKM y elimina cualquier usuario de la base de datos que no esté presente en la lista de usuarios de Active Directory.
Estructura LDAP
Sección titulada «Estructura LDAP»dc=com dc=company cn=users sAMAccountName=okmAdmin cn=users,dc=company,dc=com userPrincipalName=okmAdmin@mail.com cn=OpenKM Administrator sAMAccountName=user1 cn=users,dc=company,dc=com userPrincipalName=user1@mail.com cn=User Name 1 sAMAccountName=user2 cn=users,dc=company,dc=com userPrincipalName=user2@mail.com cn=User Name 3Paso 1 - parámetros de configuración
Sección titulada «Paso 1 - parámetros de configuración»- Los usuarios que sean miembros de ROLE_ADMIN o ROLE_USER se crean en la base de datos.
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.plugin.principal.MixedLdapSyncedPrincipalAdapter |
| system.login.lowercase | String | true |
| principal.ldap.server | String | ldap://192.168.0.6:389 |
| principal.ldap.security.principal | String | CN=Administrator,cn=users,dc=company,dc=local |
| principal.ldap.security.credentials | String | password |
| principal.ldap.referral | String | |
| principal.ldap.users.from.roles | Boolean | false |
| principal.ldap.user.attribute | String | sAMAccountName |
| principal.ldap.user.search.base | List | dc=company,dc=local |
| principal.ldap.user.search.filter | String | (objectclass=person) |
| principal.ldap.username.attribute | String | cn |
| principal.ldap.username.search.base | String | dc=company,dc=local |
| principal.ldap.username.search.filter | String | (&(objectClass=person)(sAMAccountName={0})) |
| principal.ldap.mail.attribute | String | |
| principal.ldap.mail.search.base | String | dc=company,dc=local |
| principal.ldap.mail.search.filter | String | (&(objectClass=person)(sAMAccountName={0})) |
Paso 2 - Inicio de sesión simplificado
Sección titulada «Paso 2 - Inicio de sesión simplificado»#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.user.search.filter=(sAMAccountName={0})Paso 2 - Configurar el inicio de sesión (configuración antigua)
Sección titulada «Paso 2 - Configurar el inicio de sesión (configuración antigua)»Aplique los cambios en el fichero openkm.properties.
El parámetro “okm.authentication.database” deshabilita el inicio de sesión por base de datos.
El parámetro “okm.authentication.ldap” deshabilita el inicio de sesión LDAP interno.
# Disable default OpenKM authenticationokm.authentication.database=falseokm.authentication.ldap=false
# Enable openkm.xml configuration fileokm.authentication.config=file:/home/openkm/tomcat-8.5.69/openkm.xmlAplique los cambios en el fichero openkm.xml (consulte la sección de documentación Configuring openkm.xml para más información).
<!-- LDAP authentication --> <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.6:389"/> <beans:property name="userDn" value="CN=Administrator,cn=users,dc=company,dc=local"/> <beans:property name="password" value="password"/> <beans:property name="baseEnvironmentProperties"> <beans:map> <beans:entry> <beans:key> <beans:value>java.naming.referral</beans:value> </beans:key> <beans:value>follow</beans:value> </beans:entry> </beans:map> </beans:property> </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:bean> </beans:constructor-arg> <beans:constructor-arg name="authoritiesPopulator" ref="databaseAuthoritiesPopulator"/> </beans:bean>
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> <beans:constructor-arg index="0" value="dc=company,dc=local" /> <beans:constructor-arg index="1" value="(sAMAccountName={0})" /> <beans:constructor-arg index="2" ref="contextSource" /> <beans:property name="searchSubtree" value="true" /> </beans:bean>
<beans:bean id="userDetailService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> </beans:bean>
<beans:bean id="databaseAuthoritiesPopulator" class="com.openkm.principal.DatabaseAuthoritiesPopulator"> </beans:bean>Para versiones anteriores a la 8.1.12, use la siguiente definición para los beans databaseAuthoritiesPopulator y userDetailService:
<beans:bean id="userDetailService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> <beans:constructor-arg ref="userSearch"/> <beans:constructor-arg ref="databaseAuthoritiesPopulator"/> </beans:bean>
<!-- Get roles from database --> <beans:bean id="databaseAuthoritiesPopulator" class="com.openkm.principal.DatabaseAuthoritiesPopulator"> <beans:constructor-arg ref="dataSource"/> <beans:constructor-arg value="select ur_user, ur_role from OKM_USER_ROLE where ur_user=?"/> </beans:bean>