Active directory SonarQube LDAP身份验证似乎已加载,但已赢得';不允许通过域用户登录

Active directory SonarQube LDAP身份验证似乎已加载,但已赢得';不允许通过域用户登录,active-directory,ldap,sonarqube,Active Directory,Ldap,Sonarqube,我一直在尝试使用LDAP身份验证插件(v1.4)设置SonarQube(v4.1),但我无法让它针对我的域用户进行身份验证。我的配置设置如下: ######################### # LDAP configuration ######################### # General Configuration sonar.security.realm=LDAP sonar.security.savePassword=true sonar.security.updateU

我一直在尝试使用LDAP身份验证插件(v1.4)设置SonarQube(v4.1),但我无法让它针对我的域用户进行身份验证。我的配置设置如下:

#########################
# LDAP configuration
#########################
# General Configuration
sonar.security.realm=LDAP
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
sonar.authenticator.downcase=true
sonar.authenticator.createUsers=true

ldap.authentication=simple
ldap.realm=mydomain.co.uk
ldap.bindDn=CN=USERNAME,OU=developers,DC=mydomain,DC=co,DC=uk
ldap.bindPassword=PASSWORD

# User Configuration
#ldap.user.baseDn=OU=developers,DC=mydomain,DC=co,DC=uk
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

# Group Configuration
ldap.group.baseDn=CN=Domain Users,CN=Users,DC=adastra,DC=co,DC=uk
ldap.group.request=(&(objectClass=group)(member={dn}))
日志输出以下消息,似乎表明LDAP连接工作正常:

2014.01.20 16:12:32 INFO  [org.sonar.INFO]  Security realm: LDAP
2014.01.20 16:12:32 INFO  [o.s.p.l.LdapSettingsManager]  Auto discovery mode
2014.01.20 16:12:32 INFO  [o.s.p.l.LdapSettingsManager]  Detected server: ldap://dc02.mydomain.co.uk:389
2014.01.20 16:12:32 INFO  [o.s.p.l.LdapSettingsManager]  User mapping: LdapUserMapping{baseDn=dc=mydomain,dc=co,dc=uk, request=(&(objectClass=user)(sAMAccountName={0})), realNameAttribute=cn, emailAttribute=mail}
2014.01.20 16:12:32 INFO  [o.s.p.l.LdapSettingsManager]  Group mapping: LdapGroupMapping{baseDn=CN=Domain Users,CN=Users,DC=mydomain,DC=co,DC=uk, idAttribute=cn, requiredUserAttributes=[dn], request=(&(objectClass=group)(member={0}))}
2014.01.20 16:12:32 INFO  [o.s.p.l.LdapContextFactory]  Test LDAP connection on ldap://dc02.mydomain.co.uk:389: OK
2014.01.20 16:12:32 INFO  [org.sonar.INFO]  Security realm started
但它似乎不适合我的用户,除非我使用本地用户。通过设置在包装器上启用日志记录时:

wrapper.console.loglevel=DEBUG
我在日志中发现以下错误,但这并没有多大帮助!:)


我使用的是SonarQube 3.7.3,我附加了我的配置,可以正常工作。我希望这会有用

# General Configuration
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://...
ldap.bindDn=user
ldap.bindPassword=password

# User Configuration
ldap.user.baseDn=ou=People,dc=company,dc=local
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

感谢@aaron,他为我指明了正确的方向!就我的问题而言,这是自动发现和我连接到的森林的问题。根据需要,在连接到林时,您应该使用不同的端口,以便它可以搜索整个林,而不是您碰巧连接到的域(我认为在自动发现模式下可能不是正确的域)。最后,对我有效的配置是:

# General Configuration
ldap.realm=mydomain.com
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://dc.mydomain.com:3268 

# User Configuration
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

这实际上非常简单,不需要用户帐户来连接。这意味着它处于简单的身份验证模式(我似乎无法让它在其他任何情况下工作),但这对我来说很好,因为它是一个仅限内部的系统。

以前没有一个解决方案对我有效,但这:

# Configuration
sonar.realm=myreal.domain.com
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
ldap.url=ldap://myreal.domain.com:389

ldap.bindDn=cn=CNUser,dc=domain,dc=com
ldap.bindPassword=password

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

#logeo lo que pasa
wrapper.console.loglevel=DEBUG

我的Ldap服务器确实需要身份验证,所以我无法避免。如果它对您不起作用,请尽量不要指定ldap.user.request:这取决于您网络的ldap服务器的配置。

使用端口3268对我起了作用。以下是我使用SonarQube 5.0.1和Active Directory的配置:

sonar.security.realm=LDAP
sonar.security.savePassword=true
sonar.security.updateUserAttributes=true
sonar.authenticator.createUsers=true

ldap.url=ldap://dc101.office.company.com:3268
ldap.bindDn=CN=Service Account,OU=Windows Service,OU=Accounts,OU=Resources,DC=office,DC=company,DC=com
ldap.bindPassword=PASSWORD

ldap.user.baseDn=DC=office,DC=company,DC=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

我只是通过让SonarQube LDAP插件与Active Directory一起工作。由于每个人的网络设置都不同,所以通常不能复制和粘贴配置。以下是我用来确定公司正确配置的流程:

如中所述,此配置位于文件中:

SONARQUBE_HOME/conf/sonar.properties

以下行是必需的:
sonar.security.realm=LDAP
。其他线路将因公司而异

使用GUI工具测试配置对我很有帮助。我使用了(LDAP管理员的免费只读版本)。在LDAP浏览器中

  • 创建一个新的配置文件
  • “查找服务器”按钮将帮助确定ldap.url。您将需要以类似于ldap.url的
    ldap.url的内容结束=ldap://dc01.mycompany.local:3268
    。注意:如另一个回答中所述,这可能需要与此屏幕中列出的端口不同
  • “基本DN”框现在可以留空
  • 对于身份验证,我只选择了当前登录的用户
  • 过滤器也可以暂时留空
  • 单击Finish,它将在广告的顶层显示项目
  • F3切换快速搜索栏
  • 由于无法使用匿名身份验证将SonarQube连接到AD,因此需要为SonarQube服务选择一个用户作为连接。在快速搜索中搜索该用户
  • 您应该找到一个CN(通用名)条目。双击它打开它
  • 找到DifferentiedName字段并复制其值以用作您的
    ldap.bindDn
  • ldap.bindPassword
    应该是该用户的密码
  • 这应该足以让SonarQube成功启动,但不足以让它搜索试图登录到SonarQube web门户的用户。为此,首先选择一个样本人(比如你自己)
  • 再次快速搜索样本人员并打开他们的CN条目
  • 获取他们的DiscrimitedName的值,删除“CN={this Name}”部分,并将其放入
    ldap.user.baseDn
  • 您需要使用
    ldap.user.request
    确定的最后一项。SonarQube文档中关于与AD一起使用的建议对我很有用:
    (&(objectClass=user)(sAMAccountName={login}))
    。让我解释一下原因,以防它对你不起作用。“{login}”将替换为SonarQube为其用户名输入的任何内容,因此请求字符串(在LDAP浏览器中称为“过滤器”)本质上是指搜索所有objectClass等于“user”且其sAMAccountName等于SonarQube web门户中用户名文本框中键入的任何内容的条目。在示例人员的信息中,应该至少有一个名为“objectClass”的字段。其中一个应该具有值“user”。还应该有一个sAMAccountName字段。将该值用于SonarQube web门户中的用户名文本框
  • 要测试该请求字符串是否适合您,请在LDAP浏览器中执行目录搜索(Ctrl+F3)。将ldap.user.baseDn值放入“搜索DN”文本框,并将ldap.user.request值放入过滤器文本框(请确保手动将“{login}”替换为示例用户名)。它应该返回样本人员的CN条目
  • 对于新的v1.5,只需要一行:

    LDAP配置 sonar.security.realm=LDAP

    My Fix 我煞费苦心地验证了我的设置,甚至使用日志文件的“用户映射”输出行来配置手动ldapsearch命令并验证是否正确检索了我的用户

    由于某些原因,指定此设置为我修复了它:

    ldap.user.realNameAttribute=cn
    
    为什么? 这个属性应该是可选的,并且默认为cn,但它只在我手动指定它时才对我有效。这可能是个bug

    使用ldapsearch进行调试 ldapsearch允许您直接绕过应用程序查询LDAP

    我在日志文件中查找了这一行:

    INFO  web[o.s.p.l.LdapSettingsManager] User mapping: LdapUserMapping{baseDn=DC=my-ad,DC=example,DC=com, request=(&(objectClass=user)(sAMAccountName={0})), realNameAttribute=cn, emailAttribute=mail}
    
    然后构建了一个ldapsearch命令,如:

    ldapsearch -D CN=myldapuser,CN=Users,DC=my-ad,DC=example,DC=com -W -h my-ad.example.com -b "DC=my-ad,DC=example,DC=com" "(&(objectClass=user)(sAMAccountName=myuser))"
    
    • -D指定绑定DN,basicall
      ldapsearch -D CN=myldapuser,CN=Users,DC=my-ad,DC=example,DC=com -W -h my-ad.example.com -b "DC=my-ad,DC=example,DC=com" "(&(objectClass=user)(sAMAccountName=myuser))"