Gerrit和Active Directory

时间:2012-05-04 10:59:49

标签: git active-directory ldap gerrit

我尝试将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)
    [...]

是否有人设置了可能有帮助的类似配置?

4 个答案:

答案 0 :(得分:4)

对不起伙计们,我的错在这里。在我的配置中,我使用ldap.user作为我的设置名称而不是ldap.username。一旦我改变了我的AD绑定正常工作。

答案 1 :(得分:1)

在您的示例中,您使用"CN=adam,CN=Users,DC=myusers,DC=com",但错误消息表明可分辨名称应类似于...,CN=Users,DC=NRII,DC=com。检查您在配置中指定的基础对象是否正确,例如,哪个条目为cn=adam从属?

答案 2 :(得分:0)

错误是你试图在没有绑定的情况下进行搜索,但这就是你的LDAP应用程序应该为你做的事情,因此Gerrit应该使用提供的信息,绑定,然后搜索。但错误意味着它正在跳过那一步。

答案 3 :(得分:0)

我努力让它发挥作用(Gerrit 2.13.1)。当时我在一家受到严格监管的公司,因此我不敢在公司的Active Directory上请求为Gerrit创建专用用户。 不幸的是,这家公司的标准用户创建过程(在Windows中?)是姓氏和名字,导致AD用户名如下:

CN = Doe,John,OU = EvilCorp用户,DC = foo,DC = bar,DC = corp

       ^
       |   

专家眼睛可能会通过 OU = EvilCorp Users 中的空格字符看到问题,但这是逗号

  

在LastName,FirstName模式中,如 CN = Doe,John 创建了问题。

一旦我创建了Gerrit专用用户( GerritUser ,没有名字),就行:

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

已被接受,我可以使用我常用的个人Windows / AD用户ID和密码登录。

请注意,如果您尝试将逗号转义为 CN = Doe \,John ... (带或不带双引号),则gerrit.config文件被声明为无效

对于正则表达式编写者来说,明确切割逗号会更方便。

注意:在Windows上使用gerrit进行测试

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