Билет Kerberos отправляется только при включенном режиме совместимости в IE
В нашей настройке Kerberos, когда к URL нашего приложения обращаются с помощью IE 11, билет Kerberos не отправляется вместе с запросом. Однако если включен режим совместимости (отображать сайты интрасети в представлении совместимости), то отправляется билет Kerberos, и проверка подлинности работает нормально. Мы используем IE 11. При использовании инструмента разработчика строка пользовательского агента изменяется с Default на Internet Explorer 10, затем также работает.
Аутентификация всегда хорошо работает на Chrome.
ОБНОВЛЕНИЕ: Мы наблюдали трафик на Wireshark, обнаружили, что когда режим совместимости выключен, то сервер не вызывает клиента для согласования. Однако, когда совместимость включена, сервер вызывает клиента, отправляя ответ 401.
Любые указатели высоко ценятся.
1 ответ
Наконец, мы определили точную причину и решение этой проблемы.
Первопричина:
Мы используем реализацию cas 3.5.3 для Kerberos. Эта библиотека поддерживает список пользовательских агентов; быть точной подстрокой строки User-Agent. Этот список используется для проверки совместимости браузера для аутентификации Kerberos или нет.
Есть изменения в Строке User Agent IE 11. См. Эту Ссылку
Строка пользовательского агента, отправленная IE 11 (в режиме несовместимости), не поддерживается реализацией CAS 3.5.3, которую мы используем.
Разница между строками User Agent из двух запросов (режим совместимости IE 11 включен и выключен) заключается в следующем:
При совместимости
Mozilla/4.0 (совместимый; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E)
С выключенной совместимостью
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0), как Gecko
Первый пользовательский агент обрабатывается библиотекой (она ищет слово "MSIE", которое находится в списке поддерживаемых пользовательских агентов), тогда как другой агент отбрасывается, поскольку он не содержит слова "MSIE". Проблема не возникла с IE 9/10, потому что их соответствующие пользовательские агенты содержат строку "MSIE".
Решение:
Список пользовательских агентов, поддерживаемых cas3.5.3, переопределяется, и к нему добавляется запись, соответствующая пользовательскому агенту IE11. Теперь запрос получает обработанное свойство и логин Kerberos работает правильно.
Я надеюсь, что это будет полезно для других разработчиков, работающих над библиотекой cas.