При администрировании сервера NextCloud (примерно на 500 пользователей), с авторизацией через Active Directory столкнулся со следующей проблемой:
Если у пользователя в AD логин из русских букв - то в облако его не пустит, а в логах NextCloud будут сыпаться ошибки вида:
{"reqId":"CiEIVGJ\/b9ozGxZuHPpH","remoteAddr":"10.101.0.16","app":"user_ldap","message":"uid for 'cn=\u044e\u0433\u043e\u0432 \u0434\u0430\u043d\u0438\u0438\u043b \u0430\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447,ou=users,ou=uk,dc=corp,dc=organization,dc=loc' must not be an empty string","level":3,"time":"2017-06-14 14:28:10","method":"GET","url":"\/settings\/users\/users?offset=0&limit=50&gid=&pattern=","user":"admin","version":"11.0.3.2"}
и в административной панели перестанут отображаться пользователи.
Из документации:
NextCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя NextCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется DN для уменьшения числа обращений к LDAP, однако он не используется для идентификации. Если DN был изменён, то изменения будут найдены. Внутреннее имя NextCloud используется повсеместно в ownCloud.
Данные соответствия хранятся в базе MySQL в таблице oc_ldap_user_mapping, со структурой:
ldap_dn | owncloud_name | directory_uuid |
cn=Ivan Petrov,ou=manager,ou=users,ou=uk,dc=corp,dc=organization,dc=loc | IPetrov | 94332767-6CDD-440B-B174-3B36666A2EF8 |
И после того, как такой пользователь AD с русскоязычным логином попытается войти в свой аккаунт, в таблице создастся аналогичная запись, но с пустой ячейкой owncloud_name:
ldap_dn | owncloud_name | directory_uuid |
cn=???? ??????,ou=manager,ou=users,ou=uk,dc=corp,dc=organization,dc=loc | 94332767-6CDD-440B-B174-3B36666A2EF8 |
Из-за этого и перестает корректно отображаться список пользователей в панели администратора.
Чтобы исправить эту ошибку, нужно подключиться к базе данных облака, и вручную удалить неполную запись:
delete from oc_ldap_user_mapping where directory_uuid = "UUID пользователя с пустой owncloud_name";
После этого нужно изменить логин пользователя в Active Directory на латиницу, и в панели администратора NextCloud, в разделе Интеграция LDAP/AD, на вкладке Эксперт нажать на Очистить соответствия Имя - пользователь LDAP.
Теперь пользователь сможет нормально авторизоваться, а список пользователей в админке будет корректно отображаться. Дабы в будущем избежать подобных проблем - рекомендую пользователям при создании делать логины на латинице, а тех, у кого логин русскоязычный - либо переименовывать, либо исключать из группы, с которая имеет право авторизовываться в облаке, иначе будут возникать вышеуказанные ошибки.