Ir al contenido

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.

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 3
  • 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 mail
principal.ldap.mail.search.base String dc=company,dc=local
principal.ldap.mail.search.filter String (&(objectClass=person)(sAMAccountName={0}))
#Authentication
okm.authentication.database=false
okm.authentication.ldap=true
#LDAP
ldap.server=ldap://192.168.0.13
ldap.manager.distinguished.name=CN=Administrator,CN=Users,DC=openkm,DC=local
ldap.manager.password=*secret*
ldap.base=DC=openkm,DC=local
ldap.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 authentication
okm.authentication.database=false
okm.authentication.ldap=false
# Enable openkm.xml configuration file
okm.authentication.config=file:/home/openkm/tomcat-8.5.69/openkm.xml

Aplique 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>