Difference between revisions of "Ldap-example3"

From OpenKM Documentation
Jump to: navigation, search
(Created page with '== Configuration parameters == <source lang="java"> principal.adapter=com.openkm.principal.LdapPrincipalAdapter system.login.lowercase=true principal.ldap.referral= principa…')
 
(Configuration parameters)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
Active directory connection which allows to connect any active directoy authenticated user member of ROLE_USER or ROLE_ADMIN.
 +
 +
== LDAP structure ==
 +
dc=com
 +
    dc=company
 +
        ou=OPENKM
 +
            cn=ROLE_ADMIN
 +
                member=okmAdmin
 +
                member=user1
 +
            cn=ROLE_USER
 +
                member=user3
 +
            cn=ROLE_XXXX
 +
                member=user2
 +
            cn=ROLE_YYYY
 +
                member=user4
 +
                ...
 +
        ou=organization1
 +
            sAMAccountName=okmAdmin
 +
                memberOf=CN=ROLE_ADMIN,OU=OPENKM,DC=company,DC=com
 +
                userPrincipalName=okmAdmin@mail.com
 +
                cn=OpenKM Administrator
 +
            sAMAccountName=user1
 +
                memberOf=CN=ROLE_ADMIN,OU=OPENKM,DC=company,DC=com
 +
                userPrincipalName=user1@mail.com
 +
                cn=User Name 1
 +
            sAMAccountName=user2
 +
                memberOf=CN=ROLE_XXXX,OU=OPENKM,DC=company,DC=com
 +
                userPrincipalName=user2@mail.com
 +
                cn=User Name 3
 +
        ou=organization2
 +
            sAMAccountName=user3
 +
                memberOf=CN=ROLE_USER,OU=OPENKM,DC=company,DC=com
 +
                userPrincipalName=user3@mail.com
 +
                cn=User Name 3
 +
            sAMAccountName=user4
 +
                memberOf=CN=ROLE_YYYY,OU=OPENKM,DC=company,DC=com
 +
                userPrincipalName=user4@mail.com
 +
                cn=User Name 4
 +
 +
'''Valid groups:'''
 +
* cn=ROLE_ADMIN,'''ou=OPENKM,dc=company,dc=com'''
 +
* cn=ROLE_USER,'''ou=OPENKM,dc=company,dc=com'''
 +
* cn=ROLE_XXXX,'''ou=OPENKM,dc=company,dc=com'''
 +
* cn=ROLE_YYYY,'''ou=OPENKM,dc=company,dc=com'''
 +
 +
'''Valid users:'''
 +
* cn=user1,'''ou=organization1,dc=company,dc=com'''
 +
* cn=user2,'''ou=organization1,dc=company,dc=com'''
 +
 +
'''Invalid users:'''
 +
* cn=user3,'''ou=organization2,dc=company,dc=com'''
 +
* cn=user4,'''ou=organization2,dc=company,dc=com'''
 +
 +
{{Note|Any distinguished name include by default '''<nowiki>dc=company,dc=com</nowiki>''' except users which are not memberof ROLE_ADMIN or ROLE_USER}}
 +
 +
== OpenKM.xml ==
 +
* Users defined in any active directory node members of ROLE_ADMIN or ROLE_USER will be able to login, because has defined DC=company,DC=com as base filter, '''<beans:constructor-arg index="0" value="DC=company,DC=com" />''' and '''<beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com)''' as user account filter.
 +
* Groups readed by OpenKM can be defined in any active directory node, because has defined DC=company,DC=com as base filter, '''<beans:constructor-arg value="DC=company,DC=com"/>'''.
 +
 +
<source lang="xml">
 +
<?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-3.1.xsd
 +
                                http://www.springframework.org/schema/security
 +
                                http://www.springframework.org/schema/security/spring-security-3.1.xsd
 +
                                http://www.springframework.org/schema/task
 +
                                http://www.springframework.org/schema/task/spring-task-3.1.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.xxx.xxx"/>
 +
  <beans:property name="userDn" value="CN=connect,OU=OpenKM,DC=company,DC=com"/>
 +
  <beans:property name="password" value="****"/>
 +
  <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>
 +
    <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
 +
      <beans:constructor-arg ref="contextSource"/>
 +
      <beans:constructor-arg value="DC=company,DC=com"/>
 +
      <beans:property name="groupSearchFilter" value="member={0}"/>
 +
      <beans:property name="groupRoleAttribute" value="cn"/>
 +
      <beans:property name="searchSubtree" value="true" />
 +
      <beans:property name="convertToUpperCase" value="false" />
 +
      <beans:property name="rolePrefix" value="" />
 +
    </beans:bean>
 +
  </beans:constructor-arg>
 +
</beans:bean>
 +
 +
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
 +
  <beans:constructor-arg index="0" value="DC=company,DC=com" />
 +
  <beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=company,DC=com)))" />
 +
  <beans:constructor-arg index="2" ref="contextSource" />
 +
  <beans:property name="searchSubtree" value="true" />
 +
</beans:bean>
 +
 +
</beans:beans>
 +
</source>
 +
 
== Configuration parameters ==
 
== Configuration parameters ==
 +
* Users members of ROLE_ADMIN or ROLE_USER can be defined in any active directory node, because has defined DC=company,DC=com as base filter, '''principal.ldap.user.search.base=DC=company,DC=com''' and user search filter as '''principal.ldap.user.search.filter=(&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com)'''.
 +
* Groups can be defined in any active directory node, because has defined DC=company,DC=com as base filter, '''principal.ldap.role.search.base=DC=company,DC=com'''.
 +
* All active directory groups will be listed, because has not applied any filter restriction '''principal.ldap.role.search.filter=(objectclass=group)'''
 +
* Mail attribute used in this case was '''userPrincipalName''' ( the most usual ldap attribute to get mail is called '''mail''' ). '''principal.ldap.mail.attribute=userPrincipalName'''
 +
 
<source lang="java">
 
<source lang="java">
 
  principal.adapter=com.openkm.principal.LdapPrincipalAdapter
 
  principal.adapter=com.openkm.principal.LdapPrincipalAdapter
Line 19: Line 146:
 
  principal.ldap.roles.by.user.attribute=memberOf
 
  principal.ldap.roles.by.user.attribute=memberOf
 
  principal.ldap.roles.by.user.search.base=DC=company,DC=com
 
  principal.ldap.roles.by.user.search.base=DC=company,DC=com
  principal.ldap.roles.by.user.search.filter=(&(objectclass=person)(sAMAccountName={0}))
+
  principal.ldap.roles.by.user.search.filter=(&(objectclass=user)(sAMAccountName={0}))
  
 
  principal.ldap.user.attribute=sAMAccountName
 
  principal.ldap.user.attribute=sAMAccountName
Line 33: Line 160:
 
  principal.ldap.users.by.role.search.filter=(&(objectClass=group)(cn={0}))   
 
  principal.ldap.users.by.role.search.filter=(&(objectClass=group)(cn={0}))   
 
</source>
 
</source>
 
== OpenKM.xml ==
 
 
  
 
[[Category: Installation Guide]]
 
[[Category: Installation Guide]]

Latest revision as of 11:55, 7 January 2014

Active directory connection which allows to connect any active directoy authenticated user member of ROLE_USER or ROLE_ADMIN.

LDAP structure

dc=com
    dc=company
        ou=OPENKM
            cn=ROLE_ADMIN
                member=okmAdmin
                member=user1
            cn=ROLE_USER
                member=user3
            cn=ROLE_XXXX
                member=user2
            cn=ROLE_YYYY
                member=user4
                ...
        ou=organization1
            sAMAccountName=okmAdmin
                memberOf=CN=ROLE_ADMIN,OU=OPENKM,DC=company,DC=com
                userPrincipalName=okmAdmin@mail.com
                cn=OpenKM Administrator
            sAMAccountName=user1
                memberOf=CN=ROLE_ADMIN,OU=OPENKM,DC=company,DC=com
                userPrincipalName=user1@mail.com
                cn=User Name 1
            sAMAccountName=user2
                memberOf=CN=ROLE_XXXX,OU=OPENKM,DC=company,DC=com
                userPrincipalName=user2@mail.com
                cn=User Name 3
        ou=organization2
            sAMAccountName=user3
                memberOf=CN=ROLE_USER,OU=OPENKM,DC=company,DC=com
                userPrincipalName=user3@mail.com
                cn=User Name 3
            sAMAccountName=user4
                memberOf=CN=ROLE_YYYY,OU=OPENKM,DC=company,DC=com
                userPrincipalName=user4@mail.com
                cn=User Name 4

Valid groups:

  • cn=ROLE_ADMIN,ou=OPENKM,dc=company,dc=com
  • cn=ROLE_USER,ou=OPENKM,dc=company,dc=com
  • cn=ROLE_XXXX,ou=OPENKM,dc=company,dc=com
  • cn=ROLE_YYYY,ou=OPENKM,dc=company,dc=com

Valid users:

  • cn=user1,ou=organization1,dc=company,dc=com
  • cn=user2,ou=organization1,dc=company,dc=com

Invalid users:

  • cn=user3,ou=organization2,dc=company,dc=com
  • cn=user4,ou=organization2,dc=company,dc=com

Nota clasica.png Any distinguished name include by default dc=company,dc=com except users which are not memberof ROLE_ADMIN or ROLE_USER

OpenKM.xml

  • Users defined in any active directory node members of ROLE_ADMIN or ROLE_USER will be able to login, because has defined DC=company,DC=com as base filter, <beans:constructor-arg index="0" value="DC=company,DC=com" /> and <beans:constructor-arg index="1" value="(&(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com) as user account filter.
  • Groups readed by OpenKM can be defined in any active directory node, because has defined DC=company,DC=com as base filter, <beans:constructor-arg value="DC=company,DC=com"/>.
<?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-3.1.xsd
                                 http://www.springframework.org/schema/security
                                 http://www.springframework.org/schema/security/spring-security-3.1.xsd
                                 http://www.springframework.org/schema/task
                                 http://www.springframework.org/schema/task/spring-task-3.1.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.xxx.xxx"/>
  <beans:property name="userDn" value="CN=connect,OU=OpenKM,DC=company,DC=com"/>
  <beans:property name="password" value="****"/>
  <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>
    <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
      <beans:constructor-arg ref="contextSource"/>
      <beans:constructor-arg value="DC=company,DC=com"/>
      <beans:property name="groupSearchFilter" value="member={0}"/>
      <beans:property name="groupRoleAttribute" value="cn"/>
      <beans:property name="searchSubtree" value="true" />
      <beans:property name="convertToUpperCase" value="false" />
      <beans:property name="rolePrefix" value="" />
    </beans:bean>
  </beans:constructor-arg>
</beans:bean>

<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
  <beans:constructor-arg index="0" value="DC=company,DC=com" />
  <beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=company,DC=com)))" />
  <beans:constructor-arg index="2" ref="contextSource" />
  <beans:property name="searchSubtree" value="true" />
</beans:bean>

</beans:beans>

Configuration parameters

  • Users members of ROLE_ADMIN or ROLE_USER can be defined in any active directory node, because has defined DC=company,DC=com as base filter, principal.ldap.user.search.base=DC=company,DC=com and user search filter as principal.ldap.user.search.filter=(&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com).
  • Groups can be defined in any active directory node, because has defined DC=company,DC=com as base filter, principal.ldap.role.search.base=DC=company,DC=com.
  • All active directory groups will be listed, because has not applied any filter restriction principal.ldap.role.search.filter=(objectclass=group)
  • Mail attribute used in this case was userPrincipalName ( the most usual ldap attribute to get mail is called mail ). principal.ldap.mail.attribute=userPrincipalName
 principal.adapter=com.openkm.principal.LdapPrincipalAdapter
 system.login.lowercase=true
 principal.ldap.referral=

 principal.ldap.server=ldap://192.168.xxx.xxx:389
 principal.ldap.security.principal=CN=Administrator,OU=OpenKM,DC=company,DC=com
 principal.ldap.security.credentials=xxxxxx

 principal.ldap.mail.attribute=userPrincipalName
 principal.ldap.mail.search.base=DC=company,DC=com
 principal.ldap.mail.search.filter=(sAMAccountName={0})

 principal.ldap.role.attribute=cn
 principal.ldap.role.search.base=OU=OpenKM,DC=company,DC=com
 principal.ldap.role.search.filter=objectclass=group

 principal.ldap.roles.by.user.attribute=memberOf
 principal.ldap.roles.by.user.search.base=DC=company,DC=com
 principal.ldap.roles.by.user.search.filter=(&(objectclass=user)(sAMAccountName={0}))

 principal.ldap.user.attribute=sAMAccountName
 principal.ldap.user.search.base=DC=company,DC=com
 principal.ldap.user.search.filter=(&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=company,DC=com)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=company,DC=com)))
 
 principal.ldap.username.attribute=cn
 principal.ldap.username.search.base=DC=company,DC=com
 principal.ldap.username.search.filter=(sAMAccountName={0})
 
 principal.ldap.users.by.role.attribute=member
 principal.ldap.users.by.role.search.base=OU=OpenKM,DC=company,DC=com
 principal.ldap.users.by.role.search.filter=(&(objectClass=group)(cn={0}))