Как получить имя пользователя Windows, когда личность олицетворяет = "true" в asp.net?

Я создаю приложение asp.net mvc для intranet, доступ к которому у всех в компании должен иметь доступ. Мне нужно запустить сайт, выданный за доступ к базе данных и т.д., Но я хочу знать, кто каждый пользователь.

Когда я смотрю Page.User.Identity.Name, он пуст. Возможно ли получить имя учетной записи пользователя Windows, даже если сайт работает под управлением?

Edit: Здесь немного больше информации. У меня есть сайт в IIS 6 с включенным анонимным доступом. Сайт работает под системной учетной записью, имеющей доступ к базе данных (поскольку все сотрудники не имеют доступа к базе данных).

У моего web.config есть <authentication mode="Windows" /> и <identity impersonate="true"/>

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

Ответ 1

С <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

Ответ 2

попробуй это

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Должен вернуть строку с логином пользователя

Ответ 3

Если эта функциональность не изменилась в рамках MVC, и я не думаю, что она имеет значение, то значение Page.User.Identity.Name должно работать. Похоже, что ваш сайт настроен на анонимную аутентификацию. Если это так, попробуйте отключить его.

Ответ 4

Я просто хотел опубликовать свое исправление, потому что никто больше ничего об этом не говорил.

У меня была такая же проблема, когда я публиковал сайт на сервере, но не на моем локальном компьютере. Все настройки были одинаковыми. Однако в IIS "Веб-сайт по умолчанию" никогда не отключался. Он работал и перехватывал трафик, хотя с ним не было связано ни одного сайта. По умолчанию анонимная аутентификация была включена, но отключена на моем веб-сайте, работающем под портом 80. Похоже, не имеет значения, что на моем сайте он был отключен..., поскольку по умолчанию он был включен, он был включен для всего трафика в порт 80.

Отключение веб-страницы по умолчанию устранило проблему. Также смена порта на 8080 работает.

Я надеюсь, что это помогает кому-то.