sonarqube - 活动目录ldap错误代码49

时间:2016-07-13 08:38:14

标签: active-directory ldap sonarqube sasl sonarqube-ops

我有一个运行sonarqube 5.5的实例。 我想使用sonar-ldap-plugin 1.5.1,以便将身份验证和授权委托给我公司的Active Directory服务。

LDAP插件的配置如下(模糊一些模糊处理):

sonar.authenticator.createUsers=false
sonar.security.savePassword=false
sonar.security.realm=LDAP
ldap.url=ldap://host.my.domain

ldap.user.baseDn=OU=Users,OU=Organic Units,DC=my,DC=domain
ldap.user.request=(&(objectClass=user) (sAMAccountName={login}))
ldap.authentication=DIGEST-MD5
ldap.bindDn=CN=harmlessServiceAccount,OU=users,OU=Organic Units,DC=my,DC=domain
ldap.bindPassword=<the user password in clear text>

sonar.log.level=DEBUG

声纳服务器报告以下错误:

2016.07.13 10:19:38 INFO  web[o.s.p.l.LdapContextFactory] Test LDAP connection: FAIL
2016.07.13 10:19:38 ERROR web[o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.PlatformServletContextListener 
java.lang.IllegalStateException: Unable to open LDAP connection
...
Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1^@]
...

我使用ldapsearch完成了相同的查询,并没有遇到任何问题。所以我认为Active Directory服务是正确的,并接受这个用户和DIGEST-MD5 SASL机制。

我也通过sonarqube使用同一个用户使用SIMPLE(不安全)机制,它正在运行&#34;正确&#34;同样。 我还尝试将密码的md5哈希值而不是密码。 我尝试了很多其他我不感兴趣的事情......

我在线阅读了许多类似的问题(堆栈溢出,其他来源),但还没有找到解决方案。 你看到我的配置有什么问题吗? 我注定要使用SIMPLE机制,让每个人的密码都以明文形式移动吗? 我不能使用CRAM-MD5和GSSAPI,因为我公司的活动目录服务不支持它。

感谢您的帮助, JC

2 个答案:

答案 0 :(得分:2)

错误代码49中包含一个子代码,告诉您失败原因是什么。你报道了:

[LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1^@]

数据52e 部分是关键。

查看list I maintain here,您会看到52e表示绑定用户的密码错误。 525对于您的用户来说是错误的DN,因此您拥有正确的LDAP DN,但密码错误。

答案 1 :(得分:0)

我刚刚遇到这个并修复了sonarqube 6.x.和ldap插件2.2

我发现52e会有点误导,因为它可能是无效的密码,但如果登录不正确,这也是可能的。 http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors

我在配置中有以下内容

ldap.bindDn=domain\query_account

这适用于其他东西,但不适用于SonarQube。你的行sonar.log.level=DEBUG实际上帮助了我,我打开它,它向我展示了问题,我需要逃脱\字符。所以这对我有用。

ldap.bindDn=domain\\query_account

这可能不是你的问题,但绝对是我的。希望它有所帮助。