Настройте аутентификацию и синхронизацию с двумя LDAP в Alfresco 5.1

Мы выполняем миграцию с корпоративной версии Alfresco 4.2 на версию 5.1. В компании два домена Active Directory (основной и дочерний), поэтому в Alfresco 5.1 мы настроили две подсистемы LDAP(AD).

Структура свойств: /opt/tomcat7/shared/classes/alfresco/extension/subsystems/Authentication/ldap-ad/ldap2 /opt/tomcat7/shared/classes/alfresco/extension/subsystems/Authentication/ldap-ad/ ldap1

Проблема в том, что аутентификация и синхронизация работают только для одной подсистемы ldap-ad (ldap1 или ldap2), которые стоят на первом месте в списке цепочки аутентификации (ldap1 и ldap2 не работают вместе).

Скриншот цепочки аутентификации

Например, если ldap1 занимает первое место в списке, вход этого пользователя из ldap2 завершается ошибкой (и наоборот!). В этом случае я смотрю ошибку в alfresco.log:

Caused by: net.sf.acegisecurity.AuthenticationCredentialsNotFoundException: A valid SecureContext was not provided in the RequestContext 

Мои свойства:

/opt/tomcat7/shared/classes/alfresco/extension/subsystems/Authentication/ldap-ad/ldap1/ldap-ad-authentication.properties

ldap.authentication.active=true
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=%[email protected]
ldap.authentication.java.naming.provider.url=ldap://fake.local:***
ldap.authentication.defaultAdministratorUserNames=fake_user
ldap.authentication.java.naming.referral=follow

ldap.synchronization.java.naming.security.principal=fake_user@fake.local
ldap.synchronization.java.naming.security.credentials=somepassword
ldap.synchronization.groupSearchBase=ou=Archiv,ou=FileServerGroups,ou=Groups,dc=fake,dc=local
ldap.synchronization.userSearchBase=dc=fake,dc=local
ldap.synchronization.groupDisplayNameAttributeName=description
ldap.synchronization.userOrganizationalIdAttributeNameCustom=distinguishedName
ldap.synchronization.com.sun.jndi.ldap.connect.pool=true

/opt/tomcat7/shared/classes/alfresco/extension/subsystems/Authentication/ldap-ad/ldap2/ldap-ad-authentication.properties

ldap.authentication.active=true
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=%[email protected]
ldap.authentication.java.naming.provider.url=ldap://gss.fake.local:***
ldap.authentication.defaultAdministratorUserNames=fake_user
ldap.authentication.java.naming.referral=follow

ldap.synchronization.java.naming.security.principal=fake_user@fake.local
ldap.synchronization.java.naming.security.credentials=somepassword%
ldap.synchronization.groupSearchBase=ou=Archiv,ou=FileServerGroups,ou=Groups,dc=gss,dc=fake,dc=local
ldap.synchronization.userSearchBase=dc=gss,dc=fake,dc=local
ldap.synchronization.groupDisplayNameAttributeName=description
ldap.synchronization.userOrganizationalIdAttributeNameCustom=distinguishedName
ldap.synchronization.com.sun.jndi.ldap.connect.pool=true

alfresco-global.properties

### Authentication ###
#authentication.chain=ldap1:ldap-ad,ldap2:ldap-ad,alfrescoNtlm1:alfrescoNtlm
authentication.chain=alfinst:alfrescoNtlm,ldap1:ldap-ad,ldap2:ldap-ad

Заранее спасибо!


person Aleksey B.    schedule 10.10.2018    source источник
comment
Вы пытались отредактировать WEB-INF/classes/log4j.properties, чтобы включить некоторые регистраторы, связанные с аутентификацией? Возможно, какие-то дополнительные подробности в журналах помогут пролить свет на проблему.   -  person Jeff Potts    schedule 12.10.2018
comment
Да, мы включили некоторые параметры отладки и обнаружили ошибку в alfresco.log: DEBUG org.alfresco.repo.security.authentication.ldap.LDAPAuthenticationComponentImpl] [http-bio-8080-exec-13] Authentication user test_user ERROR [org .springframework.extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-13] Исключение из executeScript: 09160047 Обернутое исключение (с шаблоном состояния): допустимый SecureContext не был предоставлен в RequestContext... Вызвано: net. sf.acegisecurity.AuthenticationCredentialsNotFoundException: допустимый SecureContext не был предоставлен в RequestContext   -  person Aleksey B.    schedule 17.10.2018


Ответы (1)


Наконец, я решил проблему, связанную с аутентификацией пользователей. Я помещаю пустую строку параметра:

ldap.authentication.userNameFormat=

для каждой подсистемы LDAP в файлах ldap-ad-authentication.properties.

После этого пользователи из двух ldap могли успешно войти в систему.

ldap.authentication.userNameFormat

Указывает, как сопоставить идентификатор пользователя, введенный пользователем, с идентификатором, переданным в LDAP. Если задана пустая строка (по умолчанию для подсистемы ldap), запрос LDAP, включающий ldap.synchronization.personQuery и ldap.synchronization.userIdAttributeName, будет выполняться для динамического разрешения DN из идентификатора пользователя. Это позволяет структурировать каталоги и не требует, чтобы идентификатор пользователя отображался в DN.

Если установлено непустое значение, подстрока %s в этом значении будет заменена введенным идентификатором пользователя для создания идентификатора, переданного в LDAP. Это ограничивает имена пользователей LDAP фиксированным форматом. Рекомендуемый формат этого значения зависит от вашего сервера LDAP.

person Aleksey B.    schedule 21.11.2018