sonarqube 5.6 и LDAP 2.0 не могут пройти аутентификацию

Я тестирую обновление до 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

Добро пожаловать идеи о том, как исследовать дальше.

3 ответа

Решение

Скорее всего, вы столкнулись с известной проблемой SONAR-7770 - Ошибка аутентификации, если конфигурация LDAP была забыта во время обновления. Обратите внимание, что Примечание по обновлению было выпущено для этой проблемы:

В частности, не забудьте скопировать соответствующий плагин SonarQube и связанные с ним конфигурации в "conf/sonar.properties" (включая "sonar.security.realm" и "sonar.security.localUsers", если они есть) в новый экземпляр SonarQube. в противном случае вы будете заблокированы после миграции.

Поэтому важно, чтобы эта конфигурация LDAP присутствовала даже во время обновления. Если вы пропустили это, то самый простой способ - воспроизвести обновление с правильно настроенной конфигурацией, связанной с LDAP.

контекст

Помните, что во время обновления SonarQube обновляет набор данных, а также сохраняет новую информацию в базе данных (на основе новых функций). Проблема в вашем случае заключается в том, что обновление было выполнено с частичной конфигурацией (которая не была установлена sonar.security.realm а также sonar.security.localUsers), и SonarQube не смог выяснить, были ли пользователи локальными или нет, поэтому по умолчанию рассматривал их как локальных. Локальные пользователи проходят проверку подлинности не против внешних поставщиков проверки подлинности, а локально, что и есть на самом деле, что мы видим в ваших журналах (и это, очевидно, не удается, поскольку пароль находится на сервере LDAP, а не в базе данных SonarQube).

Я исправил это, вручную обновив таблицу базы данных пользователей SonarQube, предположив, что все остальные пользователи управляются LDAP, и только администратор является локальным пользователем:

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';
Другие вопросы по тегам