Геррит и Active Directory

Я пытаюсь настроить Gerrit на использование нашей корпоративной Active Directory для аутентификации. Я знаю, что многим людям удалось заставить это работать, но это просто не сработает для меня.

Если я запускаю команду ldapsearch следующим образом, я получаю правильный результат, поэтому я знаю, что мои строки поиска верны:

ldapsearch -h myserver -b "CN=Users,DC=mycompany,DC=com" -D "CN=adam,CN=Users,DC=mycompany,DC=com" -w mypassword "(sAMAccountName=adam)"

Но использование этих же настроек в моей конфигурации Gerrit не работает:

[auth]
    type = LDAP
[ldap]
    server = ldap://myserver
    accountBase = CN=Users,DC=mycompany,DC=com
    groupBase = OU=Gerrit,DC=mycompany,DC=com
    user = CN=adam,CN=Users,DC=mycompany,DC=com
    password = mypassword
    referral = follow
    accountPattern = (sAMAccountName=${username})
    groupPattern = (cn=${groupname})
    accountFullName = displayName
    accountMemberField = memberOf
    accountEmailAddress = mail

Когда я пытаюсь войти в систему, используя свою учетную запись, я получаю следующее исключение в etc/error_log:

[2012-05-04 10:03:04,595] ERROR com.google.gerrit.server.auth.ldap.LdapRealm : Cannot query LDAP to autenticate user
javax.naming.NamingException: [LDAP: error code 1 - 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece^@]; remaining name 'CN=Users,DC=mycompany,DC=com'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3072)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2978)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2785)
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1839)
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1762)
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1779)
    [...]

Кто-нибудь устанавливал аналогичную конфигурацию, которая могла бы помочь?


person Adam Rodger    schedule 04.05.2012    source источник


Ответы (4)


Извините, ребята, моя вина здесь. В моей конфигурации я использую ldap.user в качестве имени настройки вместо ldap.username. Однажды я изменил, что моя привязка AD работает правильно.

person Adam Rodger    schedule 07.05.2012

В вашем примере вы используете "CN=adam,CN=Users,DC=myusers,DC=com", но сообщение об ошибке указывает, что отличительное имя должно быть чем-то вроде ...,CN=Users,DC=NRII,DC=com. Проверьте правильность указанных вами в конфигурации базовых объектов, например, какой записи подчинен cn=adam?

person Terry Gardner    schedule 04.05.2012
comment
Извините, это должно было быть изменено на mycompany. Отличительное имя для моего пользователя определенно CN=adam,CN=Users,DC=mycompany,DC=com, так как оно работает в команде ldapsearch, но не в Gerrit. - person Adam Rodger; 04.05.2012

Ошибка заключается в том, что вы пытаетесь выполнить поиск без привязки, но это то, что ваше приложение LDAP должно делать для вас, поэтому Геррит должен был использовать предоставленную информацию, привязать, а затем выполнить поиск. Но ошибка подразумевает, что он пропускает там шаг.

person geoffc    schedule 04.05.2012

Я изо всех сил пытался заставить его работать (Gerrit 2.13.1). В то время я работал в строго регулируемой компании, поэтому я не осмелился запросить создание выделенного пользователя для Геррита в Active Directory компании. К сожалению, стандартным процессом создания пользователя в этой компании (в Windows?) была фамилия и имя, что приводило к имени пользователя AD, например:

CN=Doe, John,OU=EvilCorp Users,DC=foo,DC=bar,DC=corp

       ^
       |   

Опытные глаза увидят проблемы, возможно, через символ пробела в OU=EvilCorp Users, но это запятая

,

в шаблоне Фамилия, Имя, например CN=Doe, John, который создал проблему.

Как только я создал своего выделенного пользователя Gerrit (GerritUser, без имени), строка:

username = CN=GerritUser,OU=EvilCorp Users,DC=foo,DC=bar,DC=corp

был принят, и я смог войти в систему с моим обычным личным идентификатором пользователя Windows / AD и паролем.

Обратите внимание, что файл gerrit.config объявляется недействительным, если вы пытаетесь избежать запятой, например CN=Doe\, John... с двойными кавычками или без них "

Для автора регулярных выражений ясно, что более удобным будет сокращение только запятой.

Примечание: проверено с помощью gerrit в Windows

Резюме файла etc/gerrit.config

...
[auth]
type = LDAP
[ldap]
server = LDAP://xx.yy.zz.ww
username = CN=GerritUser,OU=EvilCorp Users,DC=foo,DC=bar,DC=corp
accountBase = ou=EvilCorp Users,dc=foo,dc=bar,dc=corp
accountPattern = (&(objectClass=user)(sAMAccountName=${username}))
accountFullName = displayName
accountEmailAddress = mail
...

Резюме etc/secure.config

...
[ldap]
password = Password_Of_GerritUser
...
person NGI    schedule 14.12.2016