2012-05-04 353 views
9

我正試圖設置Gerrit使用我們的公司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)" 

但在我格里特配置使用相同的設置不起作用:

[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) 
    [...] 

是否有人設置了可能幫助您的類似配置?

回答

4

對不起傢伙,我的錯在這裏。在我的配置中,我使用ldap.user作爲我的設置名稱而不是ldap.username。一旦我改變了我的AD綁定正常工作。

0

錯誤在於您試圖在沒有綁定的情況下進行搜索,但這就是您的LDAP應用程序應該爲您執行的操作,因此Gerrit應該使用提供的信息,綁定信息和搜索信息。但錯誤意味着它正在跳過一步。

1

在您的示例中,您使用"CN=adam,CN=Users,DC=myusers,DC=com",但錯誤消息表明可分辨名稱應該是...,CN=Users,DC=NRII,DC=com之類的內容。檢查您在配置中指定的基礎對象是否正確,例如,哪個條目是cn=adam下屬?

+0

對不起的抽象,應該已經改爲 「myCompany的」。我的用戶的專有名稱肯定是'CN = adam,CN = Users,DC = mycompany,DC = com',因爲它可以在ldapsearch命令中使用,但不適用於Gerrit。 –

0

我努力讓它工作(Gerrit 2.13.1)。那時我在一家高度監管的公司,所以我不敢要求在公司的Active Directory上爲Gerrit創建一個專用用戶。 不幸的是,該公司的標準用戶創建過程(在Windows?中)是姓氏和名字,導致如下AD用戶名:

CN = Doe,John,OU = EvilCorp Users,DC = foo,DC =酒吧,DC = CORP

 ^
     | 

專家的眼睛會看到可能通過問題的空格字符OU = EvilCorp用戶但這是逗號

在姓氏,名字模式像CN = Doe,約翰,造成了這個問題。

一旦我有我的格里特專用用戶創建的(GerritUser,而不首先名),線:

用戶名= CN = GerritUser,OU = EvilCorp用戶,DC = FOO,DC =巴,DC = corp

被接受,我可以用我平常的個人Windows/AD用戶名和密碼登錄。

注意,gerrit.config文件被宣佈無效如果你想逃跑像CN =李四\,約翰...逗號帶或不帶雙引號「

很清楚了正則表達式的作家,削減有關逗號僅會更方便

注:在Windows與格里特測試

摘要等/ 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 
... 

等/ secure.config

... 
[ldap] 
password = Password_Of_GerritUser 
...