无法将SonarQube连接到LDAP目录以进行用户映射

时间:2016-01-25 09:36:26

标签: ldap sonarqube

我试图在SonarQube(最新)上设置用户映射,以便它可以从LDAP获取组织结构。

我已经在Sonar(1.5.1)上安装了LDAP插件,并创建了一个最小配置来连接这两个:

Error from external users provider: exception Java::OrgSonarApiUtils::SonarException: Unable to retrieve details for user dev1 in <default>

我的所有用户都在example.com域名下:

LDAP Structure

但是,当我尝试使用LDAP条目登录Sonar时,我在日志中收到以下错误:

2016.01.25 05:54:27 DEBUG web[o.s.p.l.LdapContextFactory] Initializing LDAP context {java.naming.provider.url=ldap://ldap:389, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, com.sun.jndi.ld
ap.connect.pool=true, java.naming.security.authentication=simple, java.naming.referral=follow}
2016.01.25 05:54:27 DEBUG web[o.s.p.l.LdapUsersProvider] integer expected inside {}: (&(objectClass=inetOrgPerson)(uid={uid}))
javax.naming.directory.InvalidSearchFilterException: integer expected inside {}: (&(objectClass=inetOrgPerson)(uid={uid}))
        at com.sun.jndi.toolkit.dir.SearchFilter.format(SearchFilter.java:602) ~[na:1.7.0_95]
        at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1785) ~[na:1.7.0_95]
...

这非常令人沮丧,因为所有这些属性都是在上面的配置文件中配置的。

有关此问题根源的任何想法?

编辑:

当我将日志深度增加到DEBUG时,我发现了这一点:

{{1}}

我不明白为什么在{}之间应该预期一个整数,与我的LDAP结构相比,这没有多大意义。

1 个答案:

答案 0 :(得分:2)

尝试将ldap.user.request设置为(&(objectClass=inetOrgPerson)(uid={login})(而不是使用(uid={uid}))。

详细说明:

LDAP插件无法识别{uid},因此不知道如何处理它。然后它将它传递给LDAP javax.naming API,这会阻塞它。 SonarQube启动时会明确显示此行为(在我的情况下记录):

  

INFO web [osplLdapSettingsManager]用户映射:LdapUserMapping {baseDn = cn = employees,dc = example,dc = org,request =(&amp;(objectClass = inetOrgPerson)(uid = {uid}))< / strong>,realNameAttribute = cn,emailAttribute = mail}

使用{login}代替documented default values中显示的关键字)将使LDAP插件构建格式正确的请求,其中包含 {0}

  

INFO web [osplLdapSettingsManager]用户映射:LdapUserMapping {baseDn = cn = employees,dc = example,dc = org,request =(&amp;(objectClass = inetOrgPerson)(uid = {0}))< / strong>,realNameAttribute = cn,emailAttribute = mail}

javax.naming API会将此{0}替换为SonarQube将设置为您在登录表单中填写的实际用户名值的参数。