プロキシへのログインはトランスポートの認証情報プロバイダーに属します。Spring 6 と Apache HttpClient 5 では、そのアカウントを中間者に限定します。

var proxy = new org.apache.hc.core5.http.HttpHost(
    "http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
    .BasicCredentialsProvider();
credentials.setCredentials(
    new org.apache.hc.client5.http.auth.AuthScope(proxy),
    new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
        proxyUser, proxyPassword.toCharArray()));

var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
    .setProxy(proxy)
    .setDefaultCredentialsProvider(credentials)
    .build();
var factory = new org.springframework.http.client
    .HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);

アプリケーションは proxyUser と proxyPassword の値を提供し、HTTP クライアントのライフサイクルを所有します。呼び出し側で別のデフォルトテンプレートを構築するのではなく、ワークロードには rest を再利用してください。

AuthScope はこの認証情報が有効な範囲を限定します。例では通常のユーザー名とパスワードの認証情報を提供します。BasicCredentialsProvider という名前は、すべてのチャレンジに HTTP Basic スキームの使用を強制するものではありません。

HTTPS の宛先では、アプリケーションの暗号化された HTTP リクエストが存在する前に、トランスポートが CONNECT 中にプロキシのチャレンジへ応答できます。Proxy-Authorization を追加する汎用的な宛先インターセプターは、このネゴシエーションと同等ではありません。

宛先のアカウントは別々に設定してください。プロキシが依然としてリクエストを拒否する場合は、通知された認証スキームと実際のホストおよびポートを保持します。別のエンドポイントに限定された認証情報は、パスワードが正しいというだけで一致するわけではありません。

関連記事