OpenLDAP example with URL base at login
LDAP Structure
Section titled “LDAP Structure”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 4Valid roles:
- 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
Invalid roles:
- cn=ROLE_INVALID,ou=dept,dc=some,dc=com (any distinguished name not included in ou=roles,dc=some,dc=com)
Valid users:
- 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
Invalid users:
- uid=USER_INVALID,ou=house,dc=some,dc=com (any distinguished name not included in ou=organization,dc=some,dc=com)
Step 1 - configuration parameters
Section titled “Step 1 - configuration parameters”Go to Administration > Configuration parameters:
| Field / Property | Type | Description |
|---|---|---|
| principal.adapter | String | The parameter is deprecated since version 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})) |
Step 2 - configure login
Section titled “Step 2 - configure login”- Important login (ldap://192.168.0.13:389/dc=some,dc=com) sets default filter base queries at dc=some,dc=com, which is concatenated by default in all filter queries.
- Roles (groups) filter base is ou=roles (real distinguished name is ou=roles,dc=some,dc=com). Any valid role should have it as a parent. ou=roles”/> really points to ou=roles,dc=some,dc=com”/>
- Users filter base is ou=organization (real distinguished name is ou=organization,dc=some,dc=com). Any valid user should have it as parent.
- User filter is uid={0}
- Finally, take into consideration the value 1 at memberUid={1}.
Apply changes in the openkm.properties file.
The parameter “okm.authentication.database” is used to disable database login.
The parameter “okm.authentication.ldap” is used to enable ldap login.
#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}Another option to configure login
Section titled “Another option to configure login”In some cases, you might be interested in setting the configuration in the file openkm.xml; please refer to Configuring openkm.xml documentation section for more information.
<?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>