通过基本身份验证对声纳运行器进行身份验证

Posted

技术标签:

【中文标题】通过基本身份验证对声纳运行器进行身份验证【英文标题】:Authenticate sonar-runner via basic auth 【发布时间】:2016-06-17 20:11:40 【问题描述】:

我们的 sonarqube 服务器落后于 http 基本身份验证,本地运行器失败并出现 401 错误。是否有可能向它提供凭据? AOfficial docs展示了如何提供sonarqube的内部用户...

UPD #1:

声纳:v5.3, 声纳运行器:v2.5

runner的调试日志:

INFO: Scanner configuration file: /Users/user/Documents/Projects/Project1/sonar-scanner-2.5/conf/sonar-runner.properties
INFO: Project configuration file: /Users/user/Documents/Projects/Project1/sonar-project.properties
INFO: SonarQube Scanner 2.5
INFO: Java 1.8.0_45 Oracle Corporation (64-bit)
INFO: Mac OS X 10.11.3 x86_64
INFO: Error stacktraces are turned on.
DEBUG: cache: /Users/user/.sonar/ws_cache/https%3A%2F%2Fexample.com%2Fsonar%2F/global
INFO: User cache: /Users/user/.sonar/cache
DEBUG: Extract sonar-runner-batch in temp...
DEBUG: Get bootstrap index...
DEBUG: Download: https://example.com/sonar/batch_bootstrap/index
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 1.171s
INFO: Final Memory: 5M/245M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
org.sonar.runner.impl.RunnerException: Unable to execute SonarQube
    at org.sonar.runner.impl.IsolatedLauncherFactory$1.run(IsolatedLauncherFactory.java:100)
    at org.sonar.runner.impl.IsolatedLauncherFactory$1.run(IsolatedLauncherFactory.java:87)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.sonar.runner.impl.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:87)
    at org.sonar.runner.impl.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:83)
    at org.sonar.runner.api.EmbeddedRunner.doStart(EmbeddedRunner.java:249)
    at org.sonar.runner.api.EmbeddedRunner.start(EmbeddedRunner.java:187)
    at org.sonar.runner.api.EmbeddedRunner.start(EmbeddedRunner.java:182)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
    at org.sonarsource.scanner.cli.Main.main(Main.java:66)
Caused by: java.lang.IllegalStateException: Fail to download libraries from server
    at org.sonar.runner.impl.Jars.downloadFiles(Jars.java:93)
    at org.sonar.runner.impl.Jars.download(Jars.java:70)
    at org.sonar.runner.impl.JarDownloader.download(JarDownloader.java:40)
    at org.sonar.runner.impl.IsolatedLauncherFactory$1.run(IsolatedLauncherFactory.java:91)
    ... 9 more
Caused by: java.lang.IllegalStateException: Status returned by url [https://example.com/sonar/batch_bootstrap/index] is not valid: [401]
    at org.sonar.runner.impl.ServerConnection.callUrl(ServerConnection.java:186)
    at org.sonar.runner.impl.ServerConnection.downloadString(ServerConnection.java:121)
    at org.sonar.runner.impl.ServerConnection.tryServerFirst(ServerConnection.java:148)
    at org.sonar.runner.impl.ServerConnection.download(ServerConnection.java:112)
    at org.sonar.runner.impl.Jars.downloadFiles(Jars.java:78)
    ... 12 more

【问题讨论】:

澄清一下:sonar-runner 和 SonarQube 服务器之间有一个代理,对吗?由于未经身份验证的请求而返回 401 的是代理?请分享sonar-runner日志 Caused by: java.lang.IllegalStateException: Status returned by url [https://xxx/sonar/batch_bootstrap/index] is not valid: [401] at org.sonar.runner.impl.ServerConnection.callUrl(ServerConnection.java:186) at org.sonar.runner.impl.ServerConnection.downloadString(ServerConnection.java:121) at org.sonar.runner.impl.ServerConnection.tryServerFirst(ServerConnection.java:148) at org.sonar.runner.impl.ServerConnection.download(ServerConnection.java:112) at org.sonar.runner.impl.Jars.downloadFiles(Jars.java:78) 这似乎不可能,但您始终可以自己添加该功能。 问题是如何,我找不到任何关于它的文档.. 这里有些可疑。 sonar-runnerbatch_bootstrap/index 之前查询api/server/version,只有后者失败。请编辑您的问题所需的详细信息:SonarQube 版本、sonar-runner 版本、sonar-runner完整调试日志链接。 【参考方案1】:

不,sonar-runner 似乎不支持代理身份验证。 SonarQube 具有内置的访问控制功能,因此我不确定您为什么需要代理身份验证。也许您可以禁用 SonarQube 的 URL 的代理身份验证。

【讨论】:

【参考方案2】:

即使配置了凭据,声纳运行器也不会使用这些凭据来首次调用服务器。端点是 /batch/index。您必须允许对该端点的公共访问。对于所有其他网址,基本身份验证都可以。

有关我的工作设置的更多详细信息,请参见我的回答:https://***.com/a/60132667/1838233

我已尝试使用跑步者和 sonar-project.properties 文件进行该设置,其中包含:

    sonar.host.url=https://myserver/sonar/
    sonar.login=$env.SONARUSER
    sonar.password=$env.SONARPWD

并且可以通过这种方式访问​​ Apache 基本身份验证后面的 Sonar。

【讨论】:

【参考方案3】:

我也一直在寻找这个,但没有找到任何允许这个的选项。我能想到的一个需要这个的用例是,声纳客户端运行在远离声纳服务器的 GCP IAP 的远端。您需要让客户端通过初始代理才能到达声纳服务器。即使声纳服务器本身支持此身份验证,您也需要某种方式让客户端传递身份验证标头。

这适用于您不信任声纳或不信任某些新手部署的声纳,但您确实信任 gcp 平台的零信任保护代理的情况

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review

以上是关于通过基本身份验证对声纳运行器进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Gradle + Sonar 主机 URL 和基本身份验证

当权限是任何人时,声纳分析需要身份验证

Spring boot 2.1.x 如何使用基本身份验证保护执行器端点

如何使用jQuery和Ajax对DreamFactory进行基本身份验证

使用基于 SAML 的基本身份验证进行身份验证?

无法使用基本身份验证进行身份验证