4

我正在测试升级到 sonarqube 5.6 并安装了 ldap 2.0 插件并将相关配置复制到我的测试 5.6 设置中。

相关配置是

sonar.security.realm=LDAP
ldap.url=ldaps://xxxx:636
ldap.bindDn=uid=xxxx,ou=xxxx,dc=xxxx,dc=xxxx
ldap.bindPassword=xxxx
ldap.user.baseDn=dc=xxxx,dc=com
ldap.user.request=(&(objectClass=person)(mail={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

我在 conf/sonar.properties 中有以下设置

sonar.log.level=DEBUG

在启动时我看到

2016.07.26 23:57:29 INFO  web[o.s.p.l.LdapContextFactory] Test LDAP connection on ldaps://xxxx:636: OK
2016.07.26 23:57:29 INFO  web[org.sonar.INFO] Security realm started

如果我尝试登录,我会在登录屏幕上看到“身份验证失败”。日志文件除了

2016.07.26 23:57:47 DEBUG web[http] GET / | time=67ms
2016.07.26 23:57:47 DEBUG web[http] GET / | time=187ms
2016.07.26 23:57:47 DEBUG web[http] GET /sessions/new | time=89ms
2016.07.26 23:57:53 DEBUG web[http] POST /sessions/login | time=71ms

相同的配置适用于 sonarqube 4.5.7 和 ldap 1.4

欢迎提出如何进一步调查的想法。

4

3 回答 3

6

您很可能遇到已知问题SONAR-7770 -如果升级期间忘记了 LDAP 配置,则身份验证失败。请注意,已针对此问题发布了升级说明:

最具体地说,不要忘记将“conf/sonar.properties”(包括“sonar.security.realm”和“sonar.security.localUsers”,如果存在)中的相关 SonarQube 插件及其相关配置复制到新的 SonarQube 实例中否则迁移后您将被锁定。

因此,即使升级期间,此 LDAP 配置也存在,这一点很重要。如果您确实错过了,那么这里最简单的方法是使用正确设置的 LDAP 相关配置重放升级。

语境

请记住,在升级期间,SonarQube 会更新数据集并将新信息存储在数据库中(基于新功能)。在您的情况下,问题是升级是使用部分配置(未设置sonar.security.realmand sonar.security.localUsers)完成的,并且 SonarQube 无法确定用户是否是本地用户,因此默认情况下将它们视为本地用户。本地用户没有针对外部身份验证提供程序进行身份验证,而是在本地进行身份验证,这确实是我们在您的日志中看到的内容(显然它失败了,因为密码位于 LDAP 服务器中,而不是 SonarQube 数据库中)。

于 2016-07-27T06:46:10.177 回答
3

我通过手动更新SonarQube的用户数据库表来修复它,假设所有其他用户都由 LDAP 管理,只有管理员是本地用户:

UPDATE sonarqube_production.users SET user_local = 0, external_identity_provider = 'ldap' WHERE id != 'admin';
于 2016-12-22T14:34:48.153 回答
2

对上面的 Schakko 查询的小修复,它应该是loginnot with id

UPDATE users SET user_local = 0, external_identity_provider = 'ldap' WHERE login != 'admin';
于 2017-10-04T09:25:43.670 回答