sonarqube 5.6 和 LDAP 2.0 无法通过身份验证
sonarqube 5.6 & LDAP 2.0 failing to authenticate
我正在测试对 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
如果我尝试登录,我会在登录屏幕上看到 "Authentication failed"。
日志文件只说
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
欢迎提供有关如何进一步调查的想法。
您很可能遇到了已知问题 SONAR-7770 - Authentication fails if LDAP configuration has been forgotten during the upgrade . Note that an Upgrade Note 已针对此问题发布:
Most specifically, don't forget to copy the related SonarQube plugin and its related configuration in "conf/sonar.properties" (including "sonar.security.realm" and "sonar.security.localUsers" if present) into the new SonarQube instance otherwise you will be locked out after migration.
因此,即使在 升级期间,此 LDAP 配置仍然存在很重要。如果您确实错过了,那么最简单的方法是在正确设置 LDAP 相关配置的情况下重播升级。
上下文
请记住,在升级过程中,SonarQube 会更新数据集并将新信息存储在数据库中(基于新功能)。您的问题是升级是使用部分配置完成的(未设置 sonar.security.realm
和 sonar.security.localUsers
),并且 SonarQube 无法确定用户是否是本地用户,因此默认情况下将它们视为本地。本地用户未通过外部身份验证提供程序进行身份验证,而是在本地进行身份验证,这确实是我们在您的日志中看到的(并且显然失败,因为密码位于 LDAP 服务器中,而不是在 SonarQube 数据库中)。
我通过手动更新 SonarQube 的 users 数据库 table 来修复它,假设所有其他用户都由 LDAP 管理,只有 admin 是本地用户:
UPDATE sonarqube_production.users SET user_local = 0, external_identity_provider = 'ldap' WHERE id != 'admin';
上面对 Schakko 查询的小修正,它应该是 login
而不是 id
:
UPDATE users SET user_local = 0, external_identity_provider = 'ldap' WHERE login != 'admin';
我正在测试对 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
如果我尝试登录,我会在登录屏幕上看到 "Authentication failed"。 日志文件只说
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
欢迎提供有关如何进一步调查的想法。
您很可能遇到了已知问题 SONAR-7770 - Authentication fails if LDAP configuration has been forgotten during the upgrade . Note that an Upgrade Note 已针对此问题发布:
Most specifically, don't forget to copy the related SonarQube plugin and its related configuration in "conf/sonar.properties" (including "sonar.security.realm" and "sonar.security.localUsers" if present) into the new SonarQube instance otherwise you will be locked out after migration.
因此,即使在 升级期间,此 LDAP 配置仍然存在很重要。如果您确实错过了,那么最简单的方法是在正确设置 LDAP 相关配置的情况下重播升级。
上下文
请记住,在升级过程中,SonarQube 会更新数据集并将新信息存储在数据库中(基于新功能)。您的问题是升级是使用部分配置完成的(未设置 sonar.security.realm
和 sonar.security.localUsers
),并且 SonarQube 无法确定用户是否是本地用户,因此默认情况下将它们视为本地。本地用户未通过外部身份验证提供程序进行身份验证,而是在本地进行身份验证,这确实是我们在您的日志中看到的(并且显然失败,因为密码位于 LDAP 服务器中,而不是在 SonarQube 数据库中)。
我通过手动更新 SonarQube 的 users 数据库 table 来修复它,假设所有其他用户都由 LDAP 管理,只有 admin 是本地用户:
UPDATE sonarqube_production.users SET user_local = 0, external_identity_provider = 'ldap' WHERE id != 'admin';
上面对 Schakko 查询的小修正,它应该是 login
而不是 id
:
UPDATE users SET user_local = 0, external_identity_provider = 'ldap' WHERE login != 'admin';