У меня есть приложение для интрасети, написанное с помощью С# в верхней части ASP.Net MVC 5 Framework. Мое приложение настроено на проверку подлинности пользователей с помощью метода "Аутентификация Windows". Это приложение работает на IIS 8.
Мое приложение использует сторонний SDK для взаимодействия с другой программой, которую я запускаю в том же домене. Это стороннее приложение позволяет пользователю входить в систему с использованием проверки подлинности Windows также через предоставленный SDK.
Проблема
Однако сервер, с которым SDK обменивается данными, всегда возвращает "Недопустимое имя пользователя/пароль".
После глубокого устранения неполадок я узнал, что IIS не возвращает правильное имя пользователя. Вместо того, чтобы возвращать "Проверенный пользователь", он возвращает пользователя, запускающего приложение пула. Итак, чтобы исправить эту проблему, я меняю настройки приложения на следующие
- Я отключил "Анонимную аутентификацию"
- Я включил "Аутентификацию Windows"
- Я включил "олицетворение ASP.NET", в то время как для параметров "олицетворения ASP.NET" установлено значение "Аутентифицированный пользователь". Заметка: что для этого требуется "классический" управляемый трубопровод не "интегрирован" для по какой-то причине.
- Я меняю настройки управляемого конвейера AppPool на "Классический" v4
- Изменен пользователь, на котором запущен AppPool, на "Сетевая служба" вместо "ApplicationPoolId"
- Затем список поставщиков аутентификации сохранил список "Переговоры" и "NTLM"
- Наконец, я включил "аутентификацию в режиме ядра".
Таким образом, приведенные выше настройки вернули правильное имя пользователя, но это не делегирование пароля в SDK. Я думаю, из-за коммуникационной панели IIS защищает зарегистрированного пользователя и не позволяет мне делегировать пароль другой службе /SDK.
Итак, я попытался изменить свою настройку на следующий
- Я меняю настройки управляемого конвейера AppPool на "Integrated" v4.0
- Изменен пользователь, на котором запущен AppPool, на "Сетевая служба"
- Я отключил "Анонимную аутентификацию"
- Я включил "Аутентификацию Windows"
- я отключено "Олицетворение ASP.NET"
- Список поставщиков аутентификации "Ведение переговоров: Kerberos", "Negotiate" и "NTLM"
- Я отключил "аутентификацию в режиме ядра", поскольку он не будет работать с поставщиком "Kerberos".
Таким образом, это не позволило мне войти в мое приложение MVC в целом, оно просто продолжает запрашивать мои учетные данные снова и снова.
Чтобы исправить это, я нашел имя своего веб-сервера в своем контроллере домена, и я перешел на вкладку "Делегация" и изменил его на "Доверять этому пользователю делегирование любой службе (только Kerberos)"
Нет этой настройки, она позволила мне войти в мое приложение MVC. Но на этот раз он не делегирует ни имя пользователя, ни пароль для SDK. Фактически, имя пользователя, которое я получаю, является именем пользователя PoolApp, а не аутентифицированным пользователем.
Чтобы охватить все мои базы, я изменяю пользователя, который является AppPool, фактическому пользователю, имеющему доступ к проверке подлинности Windows на Сервер, к которому подключается SDK. Разумеется, это сработало отлично, и я могу подключиться ко второй услуге. Тем не менее, всегда делегирует имя пользователя/пароль, запускающее AppPool, в SDK вместо делегирования подключенного/аутентифицированного имени пользователя/пароля.
В заключение IIS не делегирует имя пользователя/пароль в SDK по какой-то причине. Как я могу заставить IIS делегировать подключенный пользовательский сеанс/учетные данные другой службе?
Также возможно, что делегирование происходит неудачно, поскольку пользователи используют аутентификацию NTLM вместо Kerberos, но сервер будет делегировать только при проверке подлинности Kerberos. "Если это так, как я могу заставить пользователя используйте аутентификацию Kerberos вместо" NTLM?