【问题标题】:Can't connect SonarQube to LDAP directory for user mapping无法将 SonarQube 连接到 LDAP 目录以进行用户映射
【发布时间】:2016-01-25 09:36:25
【问题描述】:

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

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

# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://ldap:389

# User Mapping
ldap.user.baseDn=ou=users,ou=udd,dc=example,dc=com
ldap.user.request=(&(objectClass=inetOrgPerson)(uid={uid}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

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

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

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

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

关于这个问题的根源有什么想法吗?

编辑:

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

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

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

【问题讨论】:

    标签: ldap sonarqube


    【解决方案1】:

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

    详情:

    LDAP 插件无法识别{uid},因此不知道如何处理它。然后它将它传递给 LDAP javax.naming API,它对此感到窒息。这种行为在 SonarQube 启动时明确(在我的例子中是日志):

    INFO web[o.s.p.l.LdapSettingsManager] 用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org, request=(&(objectClass=inetOrgPerson)(uid={uid})), realNameAttribute=cn, emailAttribute=mail}

    改用{login}documented default values 中显示的关键字)将使 LDAP 插件使用 {0} 构建格式良好的请求:

    INFO web[o.s.p.l.LdapSettingsManager] 用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org, request=(&(objectClass=inetOrgPerson)(uid={0})), realNameAttribute=cn, emailAttribute=mail}

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

    【讨论】:

    猜你喜欢
    • 2021-03-07
    • 2019-09-21
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多