【问题标题】:Sonarqube LDAP Group Filter not workingSonarqube LDAP 组过滤器不起作用
【发布时间】:2024-01-13 10:06:01
【问题描述】:

我在 Windows Server 2016 上使用 LDAP 插件 2.2 运行 Sonarqube 6.7.1.35068。我有 LDAP 工作,因为新用户可以使用他们的域凭据登录 Sonarqube 并创建一个帐户,但我的组过滤器不起作用。我正在尝试根据特定的 AD 安全组成员身份过滤登录,但不幸的是,域中的所有用户都能够登录,因为组过滤不起作用。以下是我在属性文件中的 LDAP 配置:

#----- LDAP configuration
# General Configuration
sonar.security.realm=LDAP
sonar.authenticator.downcase=true
ldap.url=ldap://ldap.domain.com:3268
ldap.bindDn=serviceaccount@ad.domain.com
ldap.bindPassword=********

# User Configuration
ldap.user.baseDn=dc=ad,dc=domain,dc=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

# Group Configuration
ldap.group.baseDn=CN=Sonarqube,OU=Software Access,OU=Security Groups,OU=AD Groups,DC=ad,DC=domain,DC=com
ldap.group.request=(&(objectClass=group)(memberOf={dn}))
ldap.group.idAttribute=sAMAccountName

我为 ldap.group.baseDnldap.group.request 值,但基于 AD 组成员身份的用户过滤没有任何成功。遗憾的是,没有关于如何为 Sonarqube 配置这两个值的具体详细示例。有人吗?

【问题讨论】:

  • 您希望您的 LDAP 过滤不匹配,因此不对不属于某些组成员的用户进行身份验证?
  • 是的,完全正确。如果用户是 Sonarqube AD 安全组的成员,则允许他们登录到 Sonarqube。如果用户不是 Sonarqube AD 安全组的成员,则不允许他们登录到 Sonarqube。
  • 那么这与 SonarQube 本身没有关系,是吗?
  • 与Sonarqube的LDAP组配置所需的语法有关。我在我的所有工程解决方案(JIRA、Jenkins 等)中都有这个功能。我需要澄清使用 Sonarqube LDAP 组配置基于 AD 组成员身份成功过滤用户所需的语法。提供的文档未提供必要的详细信息。
  • 您在寻找this吗?

标签: ldap sonarqube


【解决方案1】:

还在 Windows Server 2016 上使用 LDAP 插件 2.2 运行 Sonarqube 6.7.1
组过滤器配置是棘手的部分,对我来说它是这样工作的:

# User Configuration
ldap.user.baseDn=DC=lan,DC=domain,DC=de
ldap.user.realNameAttribute=cn
ldap.user.LastNameAttribute=sn
ldap.user.firstNameAttribute=givenName
ldap.user.emailAttribute=mail
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))

# Group Configuration
ldap.group.baseDn=DC=lan,DC=domain,DC=de
ldap.group.idAttribute=cn
ldap.group.request=(&(objectClass=group)(member={dn}))

【讨论】:

  • 感谢您的回复,Rebse。查看您的配置,我无法找到定义组的位置,即 AD 中的位置,我原本希望定义组映射位于 ldap.group.baseDn 或 ldap.group.request 中。您在哪里定义了 AD 组?例如,我试图通过在我的ldap.group.baseDn 值。
  • @MarkConway 好的,现在我明白了。以为您根本无法获得这些团体。但是问题似乎“只”是为了获得正确的 baseDn 设置,尽管我看到了差异,例如我有 ldap.group.request=(&(objectClass=group)(member={dn})) 你有 ldap.group.request=(&(objectClass=group)(memberOf={dn}))
  • @MarkConway 刚刚在我们的广告中查看了一个应用程序组,您的设置似乎正确,但用户超出了成员,而 memberOf 具有该组嵌套的组,意味着尝试使用ldap.group.request=(&(objectClass=group)(member={dn}))
【解决方案2】:

不需要组配置。您可以通过限制 ldap.user.request 上的用户过滤器选项来限制基于特定 LDAP/AD 组成员身份的 SonarQube 访问:

ldap.user.request=(&(objectClass=user)(sAMAccountName={login})(memberOf=CN=ldap-group,OU=groups,DC=example,DC=com))

我的最终工作配置如下:

#----- General Configuration
sonar.security.realm=LDAP
sonar.authenticator.downcase=true
ldap.url=ldap://ldap.domain.com:3268
ldap.bindDn=serviceaccount@ad.domain.com
ldap.bindPassword=********

#----- User Configuration
ldap.user.baseDn=dc=ad,dc=domain,dc=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login})(memberOf=CN=ldap-group,OU=groups,DC=example,DC=com))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

【讨论】: