Текущая идентичность windows такая же, как и для текущего запроса пользователя с аутентификацией windows
У меня странная проблема с аутентификацией Windows. У нас есть приложение веб-формы asp.net, в котором у нас есть одна папка, которая использует проверку подлинности Windows. Эта папка правильно настроена для проверки подлинности Windows в IIS. Приложение использует олицетворение.net через web.config. Когда мы переходим на страницу в этой папке, используя проверку подлинности Windows:
- system.web.httpcontext.current.user.Identity.Name возвращает имя пользователя, который выполняет запрос (это ожидается)
- System.security.principal.windowsIdentifier.getCurrent.Name возвращает имя пользователя, под которым запускается приложение (это также ожидается)
Сейчас мы долго работаем над новой версией нашего продукта. И теперь мы узнаем, что поведение изменилось. Когда мы снова выполним тот же тест, и имя пользователя httpcontext, и файл Principal.windowsidentity.getcurrent возвращают имя пользователя, выполняющего запрос.
Мы проверили весь соответствующий код и, похоже, не можем найти никаких отличий, связанных с этим поведением. Мы преобразовали приложение из.Net 4.0 в.Net 4.5.2 в новой версии, однако, когда мы конвертируем старую версию в.Net 4.5.2, поведение остается правильным (2 свойства показывают различную идентичность), так что Кажется, нет разницы.
Есть мысли о том, где искать причину такого поведения?
Изменить: Отладка говорит мне, что идентификатор уже имеет неправильное значение при выполнении prerequesthandler global.asax. В начальном запросе олицетворение веб-сайта не было выполнено, и текущим идентификатором является идентификатор пула приложений.
Edit2: кажется, для конкретного сервера. По какой-то причине старая версия корректно работает на разрабатываемых машинах, а новая - нет. Тем не менее, новая версия работает правильно на серверах развертывания (наши ежедневные сборки). У кого-нибудь есть указания на возможную причину?
1 ответ
Хорошо, я нашел проблему. Проблема заключалась в том, что IIS добавил web.config в папку с помощью проверки подлинности Windows, в которой он включил олицетворение в папке. Когда аутентификация и олицетворение Windows включены в одной и той же папке, поведение, при котором идентификаторы Windows и идентификация запроса являются одним и тем же пользователем, является правильным.
Ситуация, в которой мы нуждались, может быть достигнута включением аутентификации Windows, но ОТКЛЮЧЕНИЕ олицетворения на папке. В этом случае идентификатор Windows является пользователем веб-сайта по умолчанию, а идентификатор запроса является идентификатором Windows пользователя, обращающегося к странице.