Рейтинг:0

Аутентификация в SonarQube с помощью Azure AD

флаг ph

У меня есть задача внедрить аутентификацию в SonarQube с помощью SAML из Azure AD. Мы используем SonarQube 8.9.6 LTS с openjdk 11.0.14 OpenJDK Runtime Environment build 11.0.14+9 на Ubuntu 20.04. Я установил параметры из Azure (идентификатор приложения, идентификатор поставщика, вход SAML, сертификат X.509, добавлены правильные группы и т. д.) Я также импортировал сертификат в связку ключей Java. Тест конфигурации, выполненный на стороне Azure, прошел успешно, однако, когда я пытаюсь войти в систему с помощью SAML, я получаю

Вы не авторизованы для доступа к этой странице. Пожалуйста, свяжитесь с администратором.

И следующая ошибка записывается в файле web.log SonarQube.

2022.03.09 10:44:26 WARN web[AX9qdufcVwzEhwilAADF][o.s.s.a.AuthenticationError] Не удалось получить IdentityProvider для ключа 'saml2' java.lang.IllegalArgumentException: поставщик удостоверений saml2 не существует или не включен в org.sonar.server.authentication.IdentityProviderRepository.getEnabledByKey(IdentityProviderRepository.java:54) в org.sonar.server.authentication.AuthenticationFilter.resolveProviderOrHandleResponse(AuthenticationFilter.java:54) в org.sonar.server.authentication.OAuth2CallbackFilter.doFilter(OAuth2CallbackFilter.java:66) на org.sonar.server.platform.web.MasterServletFilter$GodFilterChain.doFilter(MasterServletFilter.java:139) в org.sonar.server.authentication.DefaultAdminCredentialsVerifierFilter.doFilter(DefaultAdminCredentialsVerifierFilter.java:89) на org.sonar.server.platform.web.MasterServletFilter$GodFilterChain.doFilter(MasterServletFilter.java:139) в org.sonar.server.plugins.PluginsRiskConsentFilter.doFilter(PluginsRiskConsentFilter.java:77) на org.sonar.server.platform.web.MasterServletFilter$GodFilterChain.doFilter(MasterServletFilter.java:139) на org.sonar.server.platform.web.MasterServletFilter.doFilter(MasterServletFilter.java:108) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.UserSessionFilter.doFilter(UserSessionFilter.java:81) на org.sonar.server.platform.web.UserSessionFilter.doFilter(UserSessionFilter.java:68) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.CacheControlFilter.doFilter(CacheControlFilter.java:76) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.SecurityServletFilter.doHttpFilter(SecurityServletFilter.java:76) на org.sonar.server.platform.web.SecurityServletFilter.doFilter(SecurityServletFilter.java:48) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.RedirectFilter.doFilter(RedirectFilter.java:58) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.RequestIdFilter.doFilter(RequestIdFilter.java:66) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) на org.sonar.server.platform.web.RootFilter.doFilter(RootFilter.java:62) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) в org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:194) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) в ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256) в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364) на org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624) в org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831) в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1651) в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) в java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) в java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) на java.base/java.lang.Thread.run(Thread.java:829)

Я проверил трафик SAML, и вот что он показывает:

â¬â¹<samlp:AuthnRequest AssertionConsumerServiceURL="https://ComapnyDomain.org/oauth2/callback/saml" Destination="https://CompanyDomain.org/oauth2/callback/saml2" ID="ONELOGIN_masked" IssueInstant="2022-03-09T08:45:23Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0" xmlns:saml="урна:оазис:имена:tc:SAML:2.0:утверждение" xmlns:samlp="урна:оазис:имена:tc:SAML:2.0:протокол"> saml:Issuerhttps://CompanyDomain.org</saml:Issuer><samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/></samlp:AuthnRequest>

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.