общий клиент http - токен kerberos при согласовании имеет символы \ r \ n (перевод строки) - PullRequest
2 голосов
/ 11 июня 2010

Я пытаюсь использовать http-клиент из Джакарты. Выполнение аутентификации kerberos для связи с сервером. Аутентификация всегда терпит неудачу. При более глубоком копании я обнаружил, что заголовок токена kerberos содержит символы перевода строки в начале строки, что является основной причиной проблемы. Почему у него \ r \ n символов и почему это проблема?

1 Ответ

3 голосов
/ 11 июня 2010

\ r \ n символов в маркере kerberos - это проблема, потому что \ r является управляющими символами HTTP.По сути это означает, что сервер видит только первую строку токена и игнорирует остальные, следовательно, не проходит аутентификацию.Что еще хуже, следующие подобные токены рассматриваются как новые заголовки и не будут хорошо отформатированы.Таким образом, http-сервер будет в шоке.

Причина, по которой это происходит, заключается в том, что спецификация RFC 1521 гласит, что длина строки кодирования base64 ограничена 76 символами.Отсюда \ r \ n символов.И это не работает с протоколом HTTP.Это появляется только в том случае, если вы используете токены Kerberos, закодированные в base64.

Таким образом, решение этой проблемы заключается в удалении \ r \ n символов из заголовка токена в кодировке Kerberos base64.Кроме того, старые версии кодека apache commons не ограничивают кодирование base64 76 строками и, следовательно, не являются проблемой.Так что, если у вас есть зацепка в кодировке, удалите проблемные символы.Если вы этого не сделаете, используйте более старую версию Apache Commons Code с commons-httpclient.

...