Как не предоставлять учетные данные безопасности при аутентификации Alfresco OpenLDAP

Мы должны обеспечить аутентификацию пользователей веб-приложений Alfresco и jBoss с помощью openLDAP. OpenLDAP настроен так, что теперь необходимо предоставить какие-либо учетные данные для чтения каталога openLDAP. В случае конфигурации jBoss я не предоставляю эти учетные данные с тегами bindDN и bindCredential, и аутентификация работает. В случае Alfresco это не так, если я не предоставляю ldap.synchronization.java.naming.security.principal и ldap.synchronization.java.naming.security.credentials, у меня есть ошибка синхронизации в журнале:

2019-02-15 10:58:04,466 ERROR [org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer] [localhost-startStop-1] Synchronization aborted due to error
org.alfresco.repo.security.authentication.AuthenticationException: 01150001 Failed to authenticate, username or password is wrong. User name:cn=Manager,dc=company,dc=com Reason [LDAP: error code 49 - Invalid Credentials]

Таким образом, ldapsearch получает каталог openLDAP без предоставления каких-либо учетных данных:

ldapsearch -x -h 10.0.1.15:389 -b "dc=some,dc=ua" 

jBoss standalone-full.xml:

<login-module code="LdapExtended" flag="sufficient">
    <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
    <module-option name="java.naming.provider.url" value="ldap://10.0.1.15:389"/>
    <module-option name="java.naming.security.authentication" value="simple"/>
    <module-option name="baseCtxDN" value="ou=Users,dc=some,c=ua"/>
    <module-option name="baseFilter" value="(uid={0})"/>
    <module-option name="rolesCtxDN" value="ou=Users,dc=some,c=ua"/>
    <module-option name="roleFilter" value="(member={1})"/>
    <module-option name="roleAttributeID" value="cn"/>
    <module-option name="roleAttributeIsDN" value="false"/>
    <module-option name="roleRecursion" value="1"/>
    <module-option name="allowEmptyPasswords" value="false"/>
    <module-option name="throwValidateError" value="true"/>
</login-module>

Alfresco alfresco-global.properties

authentication.chain=alfinst:alfrescoNtlm,ldap1:ldap
ntlm.authentication.sso.enabled=false
alfresco.authentication.authenticateCIFS=false

ldap.authentication.active=true
ldap.synchronization.active=true
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=uid=%s,ou=Users,dc=some,dc=ua
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://10.0.1.15:389
ldap.authentication.java.naming.security.authentication=simple
ldap.synchronization.java.naming.security.authentication=simple
ldap.authentication.defaultAdministratorUserNames=Admin

ldap.synchronization.java.naming.security.principal=uid\=someUser,ou\=users,dc\=some,dc\=ua
ldap.synchronization.java.naming.security.credentials=12356

ldap.synchronization.groupSearchBase=ou\=Users,dc\=some,dc\=ua
ldap.synchronization.userSearchBase=ou\=Users,dc\=some,dc\=ua

ldap.synchronization.groupQuery=(&(objectclass\=posixGroup)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=posixGroup)(!(modifyTimestamp<\={0})))
ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)
ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))

ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
ldap.synchronization.timestampFormat=yyyyMMddHHmmss'Z'
ldap.synchronization.userIdAttributeName=uid
ldap.synchronization.userOrganizationalIdAttributeName=o
ldap.synchronization.groupDisplayNameAttributeName=displayName
ldap.synchronization.groupType=posixGroup
ldap.synchronization.personType=inetOrgPerson
ldap.authentication.java.naming.read.timeout=0
ldap.synchronization.userAccountStatusProperty=ds-pwp-account-disabled
ldap.synchronization.disabledAccountPropertyValue=true
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true
ldap.pooling.com.sun.jndi.ldap.connect.pool.debug=fine
synchronization.autoCreatePeopleOnLogin=true
synchronization.synchronizeChangesOnly=false
synchronization.syncOnStartup=true
synchronization.syncWhenMissingPeopleLogIn=true
synchronization.externalUserControl=true
synchronization.externalUserControlSubsystemName=ldap1

Можно ли избежать предоставления учетных данных OpenLDAP в alfresco-global.properties? Alfresco Community (сборка: 201612) jBoss EAP-6.4

1 ответ

В Alfresco происходит две вещи: аутентификация и синхронизация. Аутентификация по OpenLDAP может происходить без учетных данных, поскольку она привязывается с использованием учетных данных пользователя.

Синхронизация, однако, происходит в пакетном режиме в фоновом режиме. Для запуска задания синхронизации требуются учетные данные для аутентификации в OpenLDAP, чтобы он мог запрашивать пользователей и группы, созданные или измененные с момента последней проверки. Если вы не предоставите учетные данные, это будет означать, что ваш каталог OpenLDAP должен быть широко открытым, что, безусловно, не то, что вы хотите.

Другие вопросы по тегам