SonarQube - 活动目录 LDAP 错误代码 49

5

我有一个运行的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

而SonarQube服务器报告以下错误:

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使用简单(不安全)机制,并且它也“正常”工作。 我还尝试将密码的md5哈希值放入其中,但都没有成功。 我试过很多其他的方法,但都没能解决问题...

我在网上阅读了许多类似的问题(stackoverflow等),但仍然找不到解决方案。 您看到我的配置有什么问题吗? 我是否注定要使用简单机制,让每个人的密码以明文形式传输? 由于公司的Active Directory服务不支持CRAM-MD5和GSSAPI,所以我无法使用这两种机制。


请确认您正在使用LDAP插件而不是Azure Active Directory插件 - G. Ann - SonarSource Team
是的,我正在使用LDAP插件,版本1.5.1。 - JCh
你是说你已经有一些提示了,还是需要更多的提示呢?:) - JCh
也许我在配置ldap.bindDn和ldap.bindPassword时犯了错误。它们应该是明文还是加密的?如果需要加密,应该如何操作? - JCh
这个回答解决了你的问题吗?[LDAP:错误代码49-80090308:LdapErr:DSID-0C0903A9,注释:AcceptSecurityContext错误,数据52e,v1db1](https://dev59.com/WV0Z5IYBdhLWcg3wdQTU) - TylerH
2个回答

2

我刚遇到这个问题,并在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

这可能不是你的问题,但绝对是我的问题。希望能帮到你。

1
它确实对我有帮助,因为它似乎使用digest-md5时,bindDN应该只包含用户名(harmlessServiceAccount),前缀为SALS域(mydomain.my),而不是像ldap.bindDn = CN = harmlessServiceAccount,OU = users,OU = Organic Units,DC = my,DC = domain这样的东西。 - Tallandtree
是的,52e 是误导性的。我故意使用了错误的 bindDn,但仍然出现了该错误代码。对反斜杠进行转义对我有用(谢谢!)。如果使用此表单进行身份验证,请确保从 bindDn 中删除 "cn="。 - Patrick

2
错误代码49中包含一个子代码,可以告诉您故障原因。您报告的是:
[LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1^@]
data 52e 部分是关键。
查看我在此处维护的列表,您会发现52e表示绑定用户密码错误,525则表示用户DN错误,因此您拥有正确的LDAP DN,但密码错误。

1
谢谢您指出这个问题,但是凭据是正确的。使用另一个工具(例如ldapsearch)发出的相同请求显示ldap查询本身没有任何问题(凭证,端口等)。现在,我不确定的是sonarqube配置文件是否以明文形式接受密码,或者它应该以某种方式进行加密(如果是这样,应该以哪种方式进行加密)。我无法从sonarqube文档中找到答案。 - JCh
1
@JCh 请查看此文档页面。配置文件中的所有部分都可以进行加密。 - Jeroen Heier
谢谢,我也尝试了,但没有帮助。它仍然显示相同的错误。 - JCh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接