Я сделал HTTP-сервер на основе C ++ (или перефразировал — пролил еще одну каплю в океан) и столкнулся с проблемой с дайджест-аутентификацией HTTP.
Согласно HTTP-аутентификация RFC с использованием nextnonce
директива в Authentication-Info
заголовок является допустимым способом реализации одноразового одноразового механизма. Я сделал это в соответствии с RFC, но и Chrome, и Firefox, похоже, игнорируют директиву и выдают все дальнейшие запросы с первоначальным одноразовым номером, вызывая тем самым ненужные ответы 401. Пример иллюстрации с Firefox:
Первый запрос — мой сервер возвращает 401 и выдает начальный одноразовый номер a1f778b2afc8590e4a64f414f663128b
Firefox успешно аутентифицируется и получает ответ с Authentication-Info: nextnonce="0b72e74afbcab33a5aba05d4db03b801"
заголовок
Firefox выдает новый запрос на выборку изображения из возвращенного html — все еще первоначальный одноразовый номер c1587dd7be6251fa715540e0d6121aa5
используется, и, таким образом, возвращается ответ с новым одноразовым номером и флагом того, что срок действия предоставленного одноразового номера истек.
Тот же сценарий, что и для первого запроса изображения.
Теперь аутентификация проходит успешно с новым одноразовым номером.
Аутентификация также успешна для второго запроса.
Как видно на изображениях — хотя я отвечаю с Authentication-Info: nextnonce="0b72e74afbcab33a5aba05d4db03b801"
при успешной авторизации по первому запросу следующие два запроса все еще используют исходный одноразовый номер вместо предоставленного nextnonce
значение. У кого-нибудь был подобный опыт? Я наверняка делаю что-то не так — хотя RFC говорит, что клиент ДОЛЖЕН ответ с предоставленным nextnonce
ценность и, следовательно, это не обязательно, я очень сомневаюсь, что большинство популярных браузеров не используют эту технику.
Похоже, это известная ошибка в Firefox, открытая с 2001 года.
Ошибка 150605 — проблема дайджест-аутентификации: Mozilla игнорирует параметр nextnonce в заголовке ответа «Аутентификация-информация».
который является дубликатом
Ошибка 116177 — следующий тест проверки подлинности дайджеста не выполнен
Других решений пока нет …