使用基本身份验证和代理身份验证的 Camel Http4

Camel Http4 using basic auth and proxy auth

我一直在尝试使用 Apache Camel 的 Http4 组件连接到需要基本身份验证的 HTTPS URL。连接需要通过经过身份验证的 HTTP 代理完成。

所以,根据 docs,我这样配置 Camel 端点:

.toD("https4://target.host/resource?
        bridgeEndpoint=true
        &mapHttpMessageBody=false

        &proxyAuthHost=my.proxy.host
        &proxyAuthPort=myProxyPort
        &proxyAuthUsername=proxyUser
        &proxyAuthPassword=proxyPassword
        &proxyAuthScheme=http4

        &authenticationPreemptive=true
        &authUsername=myUser
        &authPassword=myPassword")

这会导致来自目标服务器的 403 - Forbidden 响应。查看 org.apache.http.wire 日志,它显示代理凭据 proxyUser / proxyPassword 被转发到目标服务器而不是预期的 myUser/myPasswordAuthorization header.

调试 CompositeHTTPConfigurer.configureHttpClient, ProxyHttpClientConfigurer.configureHttpClient and BasicAuthenticationHttpClientConfigurer.configureHttpClient 的源代码,似乎因为两个配置器都通过 setDefaultCredentialsProvider 将其凭据设置为 HttpClientBuilder,其中一个丢失 - 被覆盖 -正在处理中。

看起来这可能是 Camel 的 Http4 组件中的错误?还是我遗漏了什么?

这是带有 Spring Boot 1.5 的 Camel 2.18.2。1.RELEASE。

Apache Camel Users list 上提出此问题后,似乎已确认错误。

我用 camel-http 而不是 camel-http4 解决了它。端点参数需要稍微调整:

.toD("https://target.host/resource?
    bridgeEndpoint=true

    &proxyHost=my.proxy.host
    &proxyPort=myProxyPort
    &proxyAuthUsername=proxyUser
    &proxyAuthPassword=proxyPassword
    &proxyAuthMethod=Basic

    &authUsername=myUser
    &authPassword=myPassword
    &authMethod=Basic
    &httpClient.authenticationPreemptive=true")