Как получить имя пользователя 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 все равно должен работать. Похоже, ваш сайт настроен на анонимную аутентификацию. Если это так, попробуйте отключить его.

Другие вопросы по тегам