【问题标题】:Gerrit and Active DirectoryGerrit 和 Active Directory
【发布时间】:2012-05-04 10:59:49
【问题描述】:

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

有没有人设置了类似的配置可能会有所帮助?

【问题讨论】:

    标签: git active-directory ldap gerrit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 抱歉,应该改为“mycompany”。我的用户的专有名称肯定是 CN=adam,CN=Users,DC=mycompany,DC=com,因为它在 ldapsearch 命令中有效,但在 Gerrit 中无效。
      【解决方案3】:

      错误是您尝试在不绑定的情况下进行搜索,但这是您的 LDAP 应用程序应该为您执行的操作,因此 Gerrit 应该使用提供的信息,绑定然后搜索。但错误意味着它在那里跳过了一步。

      【讨论】:

        【解决方案4】:

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

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

               ^
               |   
        

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

        ,

        在像 CN=Doe, John 这样造成问题的姓氏、名字模式中。

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

        用户名 = 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
        ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多