Apache httpclient 4.5.3 рукопожатие SPNEGO не сохраняет cookie

Я пытаюсь выполнить HTTP-вызов серверной части с аутентификацией SPNEGO. Сама часть аутентификации SPNEGO, похоже, работает в соответствии с журналами трассировки, но вход в систему не выполняется, потому что серверная часть имеет состояние, а файл cookie сеанса, который он отправляет обратно с первым ответом 401, не используется httpclient. Я могу видеть в журнале трассировки, как httpclient отправляет первый запрос, получает 401 с заголовком "set-cookie", но не обрабатывает этот файл cookie; а затем, когда httpclient отвечает новым запросом с заголовком «Авторизация», cookie отсутствует; из-за этого сервер запускает еще один вход в систему с нуля и просто снова отвечает 401, с новым заголовком «set-cookie» и новым сеансом.

После неудачного рукопожатия httpclient действительно обрабатывает новый, второй файл cookie сеанса и сохраняет его; это также видно в журнале трассировки. Мой код обработки файлов cookie выглядит так:

        BasicCookieStore cookieStore = new BasicCookieStore();
        HttpClientBuilder clientBuilder = HttpClients.custom()
                .setConnectionManager(SslHandler.createClientConnectionManager(adapterType))
                .setRedirectStrategy(new IgnoreRedirectStrategy())
                .setRetryHandler(new DefaultHttpRequestRetryHandler(2, true))
                .setDefaultHeaders(allHeaders)
                .setSSLHostnameVerifier(SslHandler.getHostnameVerifier(adapterType))
                .setDefaultRequestConfig(defaultRequestConfig)
                .setDefaultCookieStore(cookieStore);

        RequestConfig localConfig = RequestConfig.custom()
                .setCookieSpec(CookieSpecs.STANDARD)
                .build();
        request.setConfig(localConfig);

        CloseableHttpClient client = clientBuilder.build();
        localcontext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        org.apache.http.HttpResponse response = client.execute(request, localcontext);

Итак, в основном вопрос: нужно ли делать что-то особенное, чтобы разрешить хранение / обработку файлов cookie во время рукопожатия SPNEGO или NTLM? Вроде работает вне таких рукопожатий, но не во время них.


person MaeseDude    schedule 08.02.2017    source источник
comment
4.5.3 ЯВЛЯЕТСЯ самой последней версией на странице загрузки. См. http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/dependency-info.html   -  person MaeseDude    schedule 10.02.2017


Ответы (1)


Я мог бы исправить проблему с помощью этого кода:

https://github.com/eveoh/ews-java-api/commit/c6f54bb9665c3b714e41ad43ebe31527f77b59fe

С его помощью файл cookie правильно сохраняется и используется во время рукопожатия.

person MaeseDude    schedule 10.02.2017