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';