WSO2 - ОШИБКА СЛУЖБЫ ДОСТУПА К ДИРЕКТОРИИ И ПОЛЬЗОВАТЕЛЬСКИЕ ИМЕНА АКТИВНОЙ КАТАЛОГИ
Я настраивал WSO2 IS 5.0.0. Я создал внешнее пользовательское хранилище ldap для чтения / записи в моем активном каталоге Windows Server 2012, который является нашим PDC. У нас также есть сервер Windows Server 2003, на котором работает активный каталог. Мы недавно обновились, и пользователи и группы на сервере 2003 были скопированы на сервер 2012 года.
Проблема, которую я заметил с WSO2, заключается в том, что любые учетные записи пользователей, которые были созданы на сервере AD 2003 в прошлом, не могут изменять свои пароли при входе на сайт wso2 carbon ( https://ip/ address:9443/carbon), Когда они пытаются изменить пароль, они получают эту ошибку: "НЕ МОЖЕТ ДОСТУПИТЬ К СЛУЖБЕ СПРАВОЧНИКА". Учетные записи, созданные в 2012 году AD, хотя (особым образом - см. Ниже для объяснения) могут успешно войти в систему и изменить свои пароли.
Дополнительная информация - на наших серверах AD пользователю отображается Фамилия, Имя (включая запятую). Индивидуальное имя пользователя одинаково на каждом сервере AD - первая буква + фамилия.
Если я создаю пользователя в 2012 году и на нем отображается имя Имя Фамилия (без запятой), с типичным именем пользователя - первое имя + фамилия, пользователь сможет войти на сайт WSO2 Carbon и сменить свой пароль без проблем. Любой пользователь с отображаемым именем Фамилия, Имя может войти в систему, но НЕ МОЖЕТ изменить свой пароль.
Кто-нибудь сталкивался с этой проблемой раньше? Есть ли особые настройки, которые мне не хватает в пользовательском магазине или в AD?
2 ответа
При использовании внешних пользовательских хранилищ, которые содержат учетные записи пользователей Active Directory, вам необходимо учитывать две основные вещи:
Убедитесь, что в вашем файле user-mgt.xml указан класс для пользовательского хранилища, оканчивающийся на "ActiveDirectoryUserStoreManager", а не "ReadWriteLDAPUserStoreManager"
Рекомендуется установить значение по умолчанию для свойства UserNameAttribute равным "uid" или "cn". Однако в Active Directory нет атрибута "uid". Существует атрибут "cn", и имя пользователя будет заполнять этот атрибут как комбинацию имени, пробела, а затем последнего. (Это похоже на то, что вы видите). Он также может содержать фамилию, запятую и имя в зависимости от настроек утилиты Active Directory Users and Computers.
Вы хотите, чтобы Identity Server выполнял поиск LDAP независимо от имени пользователя (поскольку это не меняется независимо от формата атрибута cn).
В записи Active Directory атрибут, содержащий значение идентификатора пользователя, называется "sAMAccountName". Поэтому значение, которое вы хотите использовать для свойства UserNameAttribute для хранилища пользователей Active Directory, является атрибутом "sAMAccountName".
Примечание. Вы также захотите использовать это значение в свойстве UserNameSearchFilter:
<Property name="UserNameAttribute">sAMAccountName</Property>
<Property name="UserNameSearchFilter">(&(objectClass=user)(sAMAccountName=?))</Property>
LDAPS должен быть включен, чтобы пользователи могли менять свой пароль.