Назад | Перейти на главную страницу

Ошибка аутентификации Kerberos с ошибкой 401

У нас есть приложение .NET MVC 3, развернутое в IIS 7 на нашем сервере Windows 2008 (назовем его PROD). В приложении включена анонимность и проверка подлинности Windows - все остальные отключены. Поставщики проверки подлинности, указанные в applicationHost.config, - это Negotiate и NTLM в указанном порядке.

В последнее время у нас начались проблемы с аутентификацией в этом приложении. Пользователи (которые находятся в другом домене, чем сервер), подключающиеся к IE с установленной опцией «Включить встроенную проверку подлинности Windows», получают сообщение «Не авторизовано. Ошибка HTTP 401. Запрошенный ресурс требует проверки подлинности пользователя». сообщение, даже если они предоставляют действительные учетные данные. При доступе к приложению из Firefox проблема не возникает. Также при использовании IE со снятым флажком «Включить встроенную проверку подлинности Windows» все работает нормально.

Из того, что я читал о подобных проблемах в Интернете, я понял, что у нас есть некоторые проблемы с неправильной настройкой Kerberos. Оказывается, NTLM-аутентификация работает нормально. Я проверил имена участников-служб, и они, похоже, настроены правильно (существует конфигурация по умолчанию, поскольку к нашему приложению осуществляется доступ по имени сервера netBios).

Забавно то, что у нас есть другой сервер (назовем его DEV), на котором размещено точно такое же приложение и который находится в том же домене и имеет ту же конфигурацию поставщиков аутентификации и аутентификации, а пулы приложений запускаются под одними и теми же учетными записями, и аутентификация там работает просто хорошо. Единственная разница в том, что на PROD недавно был установлен .NET 4, но я не думаю, что это может быть проблемой. Также PROD размещает это приложение в IIS в следующем виртуальном каталоге: Sites / XYZ / XYZ, так что вы получаете доступ к сайту по URL-адресу. http://server:8666/XYZ. Приложение на DEV размещается в IIS непосредственно в Sites / XYZ и доступно по URL-адресу http://server2:8666.

Не могли бы вы посоветовать мне, что еще я могу проверить? Я попытался включить ведение журнала Kerberos, но после попытки доступа к приложению не нашел журналов в средстве просмотра событий. Других идей, где искать и что проверять, у меня нет.

Во-первых, я хотел бы подтвердить, что это происходит от клиента, где IE показывает, что сайт находится в зоне надежных сайтов, а зона надежных сайтов настроена на «автоматический вход в систему с текущим именем пользователя и паролем».

Далее, я подозреваю, что размер заголовка авторизации http может превышать ограничения IIS. Интегрированная авторизация Kerberos весьма восприимчива к этой проблеме из-за того, что ограничения IIS на самом деле довольно низкие, и не требуется, чтобы членство в многих группах превысило лимит.

Каждый запрос включает токен Kerberos пользователя в заголовок авторизации http. Поскольку токен закодирован, он часто намного больше, чем фактическая используемая память.

Вы можете увеличить значения, используя следующий документ:

Параметры реестра Http.sys для Windows
http://support.microsoft.com/kb/820129

Я бы использовал следующие значения:

MaxRequestBytes - 1048576
MaxFieldLength - установите на 65534

Еще одна полезная утилита DelegConfig. Вы можете разместить это как приложение на любом веб-сайте и подключиться, чтобы получить хороший полезный отчет о том, как настроена ваша проверка подлинности Kerberos. Это должно быть протестировано как учетная запись жертвы (или правильно настроенная тестовая учетная запись, которая проявляет симптом в домене жертвы).

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx

Вам также может потребоваться просмотреть:

Как использовать SPN при настройке веб-приложений, размещенных в Internet Information Services
http://support.microsoft.com/kb/929650

В частности:

«В Active Directory убедитесь, что учетная запись является конфиденциальной и не может быть делегирована, флажок снят для пользователей, которые имеют доступ к приложению».

«Убедитесь, что все компьютеры, участвующие в процессе Kerberos, имеют согласованное разрешение имен и связаны доверием Kerberos. Например, убедитесь, что компьютеры, участвующие в процессе Kerberos, находятся в одном лесу или являются частью перекрестного леса. Kerberos trust ".

«Убедитесь, что размер токена не превышает значение, установленное для свойства MaxTokenSize». (MaxTokenSize должен быть установлен на 65535).

Internet Explorer 6 не может использовать протокол проверки подлинности Kerberos для подключения к веб-сайту, который использует нестандартный порт.
http://support.microsoft.com/kb/908209

В следующей статье также есть несколько отличных советов.

https://blogs.msdn.com/b/friis/archive/2009/12/31/things-to-check-when-kerberos-authentication-fails-using-iis-ie.aspx

В частности, проверка того, что клиент подключен к ожидаемому SPN с помощью NetMon или KerbSpy.