HttpClientContext を使用して予防的な基本認証を設定しようとしています。以下で説明する機能は、アプリケーションとサービスの認証と認可に JWT トークンと F5/BigIP を活用するためのより大きなソリューションの一部です。
curl コマンドとネットワーク トレースが成功すると、次のワークフローを確認できます。
- URL に送信された GET 要求
- BigIP インスタンスで 302 が見つかりました
- my.policy にリダイレクト -> 2 つのセッション Cookie が作成されます (LastMRH_Session および MRHSession)
- my.policy に対する GET リクエスト
- 401 無許可で返送 -> MRHSession Cookie が新しい値で更新される
- コマンド プロンプトで資格情報を入力する
- #5 の更新された MRHSession Cookie と Authorization ヘッダーが追加された my.policy に送信される GET 要求
- リダイレクト成功
私は Java コードでクライアント コンテキストを作成しましたが、常に元の MRHSession Cookie を使用し、401 で返された新しいセッション Cookie 値を取得しないことを除いて、すべてがうまく機能します (つまり、元のセッション Cookie を #7 に送り返します)。 #5から更新されたものではありません)、F5は無効なセッションIDを持っていると不平を言います。
以下は、私が使用している http コンポーネントのバージョンの gradle リファレンスです。
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.4'
クライアント コンテキストの作成は次のようになります。
public HttpClientContext create(final URI uri) {
HttpHost httpHost = httpHostFactory.create(uri);
HttpClientContext context = HttpClientContext.create();
context.setAuthCache(authCacheFactory.create(httpHost));
context.setCredentialsProvider(credentialsProviderFactory.create(httpHost));
return context;
}