Preemptive Basic Authentication with HttpClient and Cookies
I am attempting to set up premptive Basic Authentication using the HttpClientContext. The functionality I am describing below is part of a larger solution for leveraging JWT tokens and F5/BigIP for application and service authentication and authorization.
With a successful curl command and a network trace I can see the following workflow:
- GET request sent to a URL
- 302 found on the BigIP instance
- Redirect to a my.policy -> two session cookies are created (LastMRH_Session and MRHSession)
- GET request on my.policy
- 401 unauthorized sent back -> the MRHSession cookie is updated with a new value
- Enter credentials at command prompt
- GET request sent to my.policy with updated MRHSession cookie in #5 and Authorization header added
- Successful redirect
Я создал в коде Java клиентский контекст, и все прекрасно работает, за исключением того, что он всегда использует исходный файл cookie MRHSession и не получает новое значение файла cookie сеанса, возвращенное на 401 (то есть он отправляет исходный файл cookie сеанса обратно в #7). не обновленный из #5) и F5 жалуется на наличие неверного идентификатора сеанса.
Ниже приведена ссылка на версию для компонентов http, которые я использую:
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;
}