Active directory SonarQube LDAP身份验证似乎已加载,但已赢得';不允许通过域用户登录
我一直在尝试使用LDAP身份验证插件(v1.4)设置SonarQube(v4.1),但我无法让它针对我的域用户进行身份验证。我的配置设置如下: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 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://dc01.mycompany.local:3268
。注意:如另一个回答中所述,这可能需要与此屏幕中列出的端口不同ldap.bindDn
ldap.bindPassword
应该是该用户的密码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.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))"