2012-05-04 28 views
9

Próbuję skonfigurować Gerrit, aby używać naszej firmowej usługi Active Directory do uwierzytelniania. Wiem, że wielu ludziom udało się to zrobić, ale to po prostu nie zadziała dla mnie.Gerrit i Active Directory

Jeśli uruchomić polecenie ldapsearch następująco uzyskać poprawny wynik, więc wiem, że moje struny wyszukiwania są poprawne:

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

Ale przy użyciu tych samych ustawień w moim Gerrit config nie działa:

[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 

Kiedy próbuję zalogować się używając mojego konta pojawia się następujący wyjątek w 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) 
    [...] 

Czy ktoś skonfigurował podobną konfigurację, która może pomóc?

Odpowiedz

4

Przepraszam, moja wina tutaj. W mojej konfiguracji używam ldap.user jako nazwy ustawienia zamiast ldap.username. Raz zmieniłem, że moje powiązanie AD działa poprawnie.

0

Błąd polega na tym, że próbujesz wyszukiwać bez wiązania, ale taka jest twoja aplikacja LDAP, więc Gerrit powinien użyć podanych informacji, związanych, a następnie przeszukanych. Ale błąd sugeruje, że pomija tam krok.

1

W twoim przykładzie używasz "CN=adam,CN=Users,DC=myusers,DC=com", ale komunikat o błędzie wskazuje, że nazwa wyróżniająca powinna być podobna do ...,CN=Users,DC=NRII,DC=com. Sprawdź, czy podstawowe obiekty określone w konfiguracji są poprawne, na przykład, do którego wpisu podporządkowana jest pozycja cn=adam?

+0

Niestety, które powinny już zmieniony na "mojafirma". Nazwa wyróżniająca mojego użytkownika to z pewnością 'CN = adam, CN = Użytkownicy, DC = mojafirma, DC = com', ponieważ działa ona w komendzie ldapsearch, ale nie w Gerrit. –

0

Starałem się, aby działało (Gerrit 2.13.1). W tym czasie byłem w wysoce uregulowanej firmie, więc nie odważyłem się poprosić o stworzenie dedykowanego użytkownika Gerrit w Active Directory firmy. Niestety standardowy proces tworzenia użytkownik w tej spółce (? W Windows) było nazwisko i imię, prowadząc do nazwy użytkownika AD jak:

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

 ^
     | 

oczy ekspert zobaczyć problemów może poprzez znak spacji w OU = EvilCorp użytkowników ale jest to przecinek

,

w LastName, FirstName wzór podobny do CN = Doe, John, który spowodował problem.

Raz miałem Gerrit dedykowany użytkownik utworzył (GerritUser, bez imienia), linia:

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

został zaakceptowany i udało mi się zalogować za pomocą mojego zwykłego identyfikatora użytkownika Windows/AD i hasła.

Zauważ, że plik gerrit.config deklaruje nieprawidłowy jeśli spróbujesz uciec przecinek jak CN = Jan Kowalski \, ... z lub bez podwójny cudzysłów "

Oczywiste jest dla regex pisarz że cięcia na przecinek tylko byłoby wygodniejsze

. Uwaga: testowane z Gerrit Windows

Streszczenie 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 
... 

Streszczenie etc/secure.config

... 
[ldap] 
password = Password_Of_GerritUser 
... 
Powiązane problemy