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:

  1. GET request sent to a URL
  2. 302 found on the BigIP instance
  3. Redirect to a my.policy -> two session cookies are created (LastMRH_Session and MRHSession)
  4. GET request on my.policy
  5. 401 unauthorized sent back -> the MRHSession cookie is updated with a new value
  6. Enter credentials at command prompt
  7. GET request sent to my.policy with updated MRHSession cookie in #5 and Authorization header added
  8. 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;
}

0 ответов

Другие вопросы по тегам