Как получить имя пользователя Windows, когда identity impersonate="true" в asp.net?
Я создаю интранет-приложение asp.net mvc, к которому у всех в компании должен быть доступ. Мне нужно запустить веб-сайт, имитирующий доступ к базе данных и т. Д., Но я хочу знать, кем является каждый пользователь.
Когда я смотрю на Page.User.Identity.Name
это пусто Можно ли получить имя учетной записи Windows пользователя, даже если сайт работает под видом?
Изменить: вот немного больше информации. У меня есть сайт в IIS 6, работающий с включенным анонимным доступом. Сайт работает под системной учетной записью, которая имеет доступ к базе данных (поскольку все сотрудники не имеют доступа к базе данных).
Мой web.config имеет <authentication mode="Windows" />
а также <identity impersonate="true"/>
Моя цель - чтобы пользователям не приходилось входить в систему - того факта, что они вошли в нашу сеть (и тот факт, что сайт не имеет внешнего IP-адреса), достаточно для аутентификации. Я просто хотел бы знать, кто пользователь, чтобы отслеживать изменения, которые они вносят, и т. Д.
4 ответа
С <authentication mode="Windows"/>
в вашем приложении и анонимном доступе, включенном в IIS, вы увидите следующие результаты:
System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name
С <authentication mode="Windows"/>
в вашем приложении и "Анонимный доступ" отключен и только "Интегрированная проверка подлинности Windows" в IIS вы увидите следующие результаты:
System.Environment.UserName: ASPNET (user account used to run ASP.NET service)
Page.User.Identity.Name: Domain\ Windows Account Name
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET
С <authentication mode="Windows"/>
а также <identity impersonate ="true"/>
в вашем приложении и "Анонимный доступ" отключен и только "Интегрированная проверка подлинности Windows" в IIS вы увидите следующие результаты:
System.Environment.UserName: Windows Account Name
Page.User.Identity.Name: Domain\ Windows Account Name
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
Попробуй это
Principal.WindowsIdentity.GetCurrent.Name
Должен вернуть строку с логином пользователя
Я просто хотел опубликовать свое исправление, потому что никто больше ничего об этом не говорил.
У меня была такая же проблема, когда я публиковал сайт на сервере, но не на моем локальном компьютере. Все настройки были одинаковыми. Однако в IIS "Веб-сайт по умолчанию" никогда не отключался. Он работал и перехватывал трафик, хотя с ним не было связано ни одного сайта. По умолчанию анонимная аутентификация была включена, но отключена на моем веб-сайте, работающем под портом 80. Похоже, не имеет значения, что на моем сайте он был отключен..., поскольку по умолчанию он был включен, он был включен для всего трафика в порт 80.
Отключение веб-страницы по умолчанию устранило проблему. Также смена порта на 8080 работает.
Я надеюсь, что это помогает кому-то.
Если эта функциональность не изменилась в рамках MVC, и я не думаю, что она изменилась, Page.User.Identity.Name все равно должен работать. Похоже, ваш сайт настроен на анонимную аутентификацию. Если это так, попробуйте отключить его.