Почему строка авторизации меняется для каждого запроса firefox?
При работе с билетами Kerberos я заметил, что каждый запрос Firefox имеет отдельную строку авторизации в заголовке HTTP. Я загрузил простую страницу, затем несколько раз нажал кнопку перезагрузки, и она уже никогда не была прежней. Что вызывает это поведение? Я бы подумал, что линия авторизации будет оставаться постоянной в течение срока действия учетных данных Kerberos. (Обратите внимание, что я получил учетные данные с помощью команды kinit перед запуском Firefox.)
Если используется метод проверки подлинности Basic, Firefox продолжает отправлять одну и ту же строку base64 "user:password" каждый раз. Это поведение, которое я ожидал.
Есть идеи?
2 ответа
Ммм это странно. Любой шанс, что вы можете опубликовать фрагменты вывода wireshark. Одна возможность состоит в том, что полученный Сервисный билет не кэшируется, и FF получает сервисный билет. Были реализации, в которых клиент получит сервис, но не кеширует его, а вместо этого отправляется и получает билет на сервис каждый раз, когда это необходимо. Иногда это происходит из-за того, что процесс может не иметь разрешений на запись, и это относительно недорогая операция (одноразовая передача и симметричные зашифрованные данные)
Это связано с различными ограничениями как в HTTP, так и в том, как работает Negotiate-Auth.
Первоначально HTTP разрабатывался как протокол без сохранения состояния, и система аутентификации HTTP предполагает эту модель. Это было разработано, чтобы сделать полный обмен аутентификацией в каждом запросе; например, с Basic, он включает ваши полные учетные данные в каждом запросе. С Negotiate-Auth и SPNEGO то же самое верно: создается новый контекст GSS-API, и с каждым запросом выполняется новая аутентификация.
Да, это очень расточительно. Но в настоящее время не существует какого-либо стандартизированного способа аутентификации один раз, установления сеанса и последующей привязки всех последующих запросов к этому сеансу (как, скажем, IMAP, POP или ssh). В этом направлении есть работа IETF, но она очень предварительная.
Билет кэшируется; это не делает так много работы каждый раз. Но сервер и клиент каждый раз проходят весь сеанс GSS-API.