Создание пользователей из Active Directory

Добрый день.

Подскажите пожалуйста как лучше реализовать выгрузку пользователей из Active Directory в Cuba.

Я думал сделать сервис, который будет делать следующее:

  1. Получать пользователей из AD;
  2. Создавать записи в cсущности User по полученным данным пользователей.
    Но нам необходимо расширить сущность User на несколько атрибутов: табельный номер и т.д.

Подскажите, может быть есть стандартные методы по созданию пользователей?
Правильно ли я понял, что LdapAuthProvider отрабатывает, когда пользователь пытается войти в систему?

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

1 симпатия

Здравствуйте,

Вы можете как сами интегрировать выгрузку пользователей, так и воспользоваться Open Source аддоном - https://github.com/cuba-platform/ldap-addon (там уже реализована такая синхронизация)

Что касается пользователей, то вы можете расширить User и добавить все нужные атрибуты, достаточно использовать @Extends (Replace parent в Studio).

При использовании стандартной интеграции вызывается com.haulmont.cuba.web.security.ldap.LdapLoginProvider

Добрый день.
Спасибо большое за ответ.

Расширил сущность User на необходимый набор полей: теперь при создании пользователя в сущности Employee , он создается и в User.

То есть я правильно понимаю, что для базовой интеграции CuBa- Active Directory необходимо сделать следующее:

  1. Выгрузить в сущность SEC$USER всех необходимых пользователей и в поле Логин записать их sAMAccountName из AD без имени домена;

  2. В web-app.properties указать:

cuba.web.ldap.enabled = true
cuba.web.ldap.urls = ldap://192.168.1.1:389
cuba.web.ldap.base = ou=Employees,dc=mycompany,dc=com
cuba.web.ldap.user = cn=System User,ou=Employees,dc=mycompany,dc=com
cuba.web.ldap.password = system_user_password

И далее пользователи смогут входить в приложения под своими данными AD? Или же ещё необходимо будет что-то программно доработать на интерфейсе ввода логина- пароля в приложение?

Ничего больше дорабатывать не потребуется, вход будет работать.

Указал в фале web.app.properties параметры ldap:
cuba.web.ldap.enabled = true
cuba.web.ldap.urls = ldap://XXX
cuba.web.ldap.base = DC=bank,DC=int
cuba.web.ldap.user = XXX
cuba.web.ldap.password =XXX

В сущности USer завел запись с login по своему SMAcountName из AD (Ahmetshin-RM)

Перезахожу в cuba - ввожу свой логин Ahmetshin-RM и пароль к учетке.

В результате ошибка: Вход невозможен. Свяжитесь с администратором

В логах Tomkat ошибка:

2018-10-23 15:10:32.110 ERROR [http-nio-8080-exec-27] com.haulmont.cuba.web.app.loginwindow.AppLoginWindow - Internal error during login
com.haulmont.cuba.security.global.InternalAuthenticationException: Exception is thrown by login provider

Caused by: org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839 ]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839 ]
	at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:191) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:355) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.support.AbstractContextSource.doGetContext(AbstractContextSource.java:139) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.support.AbstractContextSource.getReadOnlyContext(AbstractContextSource.java:158) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:357) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:309) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:642) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:578) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1441) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1426) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1359) ~[spring-ldap-core-2.3.2.RELEASE.jar:2.3.2.RELEASE]
	at com.haulmont.cuba.web.security.ldap.LdapLoginProvider.authenticateInLdap(LdapLoginProvider.java:131) ~[cuba-web-6.9.7.jar:6.9.7]
	at com.haulmont.cuba.web.security.ldap.LdapLoginProvider.login(LdapLoginProvider.java:82) ~[cuba-web-6.9.7.jar:6.9.7]
	at com.haulmont.cuba.web.security.ConnectionImpl.loginInternal(ConnectionImpl.java:190) ~[cuba-web-6.9.7.jar:6.9.7]
	... 51 common frames omitted

Подскажите пожалуйста, что ещё надо донастроить.

Неправильно указал cuba.web.ldap.user, после того, как указал его полное distinguished name все заработало

2 сообщения перенесены в новую тему: Логин и пароль пользователя по умолчанию на LoginWindow