【问题标题】:sonarqube 5.6 & LDAP 2.0 failing to authenticatesonarqube 5.6 & LDAP 2.0 验证失败
【发布时间】:2016-11-30 18:30:50
【问题描述】:

我正在测试升级到 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

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

【问题讨论】:

    标签: ldap sonarqube sonarqube-ops sonarqube5.6


    【解决方案1】:

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

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

    因此,即使在升级过程中,此 LDAP 配置也很重要。如果您确实错过了,那么最简单的方法是在正确设置 LDAP 相关配置的情况下重放升级。

    上下文

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

    【讨论】:

    • 我没想到这也适用于全新安装,即 5.6 仅允许您从第一次运行 LDAP 时开始使用它,以后不能添加它
    • @Matt 我没这么说。如果您使用现有数据库(已与先前版本一起使用),则必须从一开始就存在 LDAP 插件。否则,您可以随时安装 LDAP 插件,但在此之前创建的用户将在这种情况下在本地进行身份验证。
    • 对,我明白了。不过,这种从本地用户声明方式的转变似乎有点不稳定。我发现以前在本地创建的用户在升级时被假定为 LDAP 用户,因此必须在升级后重新创建它们。幸运的是,我只有少数这样的用户。
    • 如果您希望在升级期间将某些用户存储为本地用户,请确保在升级期间将其 userId 设置为sonar.security.localUsers。所有这些东西在 6.x 系列中都得到了改进,“身份验证提供者”的概念应该在用户管理页面中是透明的。
    • 我将 LDAP 配置复制到 5.6.6,安装了 LDAP 插件,但仍然遇到此问题。我认为我的错误是我们的旧实例(5.1.2)正在使用 1.4 的插件,我在启动服务器之前将 2.1 的插件复制到新安装中?否则,不知道我做错了什么。
    【解决方案2】:

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

    UPDATE sonarqube_production.users SET user_local = 0, external_identity_provider = 'ldap' WHERE id != 'admin';
    

    【讨论】:

    • 该死的,正在使用 plsql 开发人员并诅咒无法正常工作。最后切换到sqlplus并发出commit语句。我傻了
    【解决方案3】:

    对上面 Schakko 查询的小修复,它应该是 login 而不是 id

    UPDATE users SET user_local = 0, external_identity_provider = 'ldap' WHERE login != 'admin';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2016-08-20
      • 2020-04-14
      • 2015-04-19
      • 2016-02-05
      相关资源
      最近更新 更多