Как получить имя пользователя с помощью аутентификации Windows в asp.net?

Я хочу получить имя пользователя с помощью аутентификации Windows

На самом деле я реализовал "Войти как другой пользователь", когда при нажатии на эту кнопку появится окно безопасности Windows, мы можем предоставить учетные данные.

В то время, если я даю какие-то другие учетные данные, он принимает только текущее имя пользователя. Как получить данное имя пользователя из Windows Security?

После этого приложение хоста в IIS отключило анонимную аутентификацию и включила аутентификацию Windows.

web.config:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
  <identity impersonate="true"/>
  <authorization>
      <allow users="*"/>
      <deny users="*"/>
  </authorization>
</system.web>
<system.webServer>
    <directoryBrowse enabled="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>

.cs

Здесь я получаю имя пользователя по умолчанию всегда

string fullName = Request.ServerVariables["LOGON_USER"];

Есть идеи? заранее спасибо

9 ответов

Это различные переменные, к которым у вас есть доступ, и их значения в зависимости от конфигурации IIS.

Сценарий 1: анонимная аутентификация в IIS с отключением олицетворения.

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           ASPNET                   
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET

Сценарий 2. Проверка подлинности Windows в IIS, олицетворение отключено.

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1   
HttpContext.Current.Request.IsAuthenticated           True             
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1   
System.Environment.UserName                           ASPNET           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET

Сценарий 3: анонимная аутентификация в IIS, олицетворение на

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           IUSR_SERVER1           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\IUSR_SERVER1 

Сценарий 4: проверка подлинности Windows в IIS, олицетворение на

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated           True          
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1
System.Environment.UserName                           USER1         
Security.Principal.WindowsIdentity.GetCurrent().Name  MYDOMAIN\USER1

легенда
SERVER1\ASPNET: Идентификатор запущенного процесса на сервере.
SERVER1\IUSR_SERVER1: В IIS определен анонимный гостевой пользователь.
MYDOMAIN\USER1: Пользователь удаленного клиента.

Источник

Вы можете получить объект WindowsIdentity пользователя под Аутентификацией Windows:

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;

и тогда вы можете получить информацию о пользователе, как identity.Name.

Обратите внимание, что вам нужен HttpContext для этого кода.

Это должно работать:

User.Identity.Name

Identity возвращает IPrincipal

Вот ссылка на документацию Microsoft.

Это зависит от конфигурации приложения, а также от IIS, как справедливо объяснил этот джентльмен в приведенной ниже ссылке. Пожалуйста, смотрите его статью ниже

http://richhewlett.com/2011/02/15/getting-a-users-username-in-asp-net/

Вы можете прочитать Name из WindowsIdentity:

var user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
return Ok(user);

Имя пользователя, которое вы получаете, как это:

var userName = HttpContext.Current.Request.LogonUserIdentity?.Name;

OP запросил имя пользователя, а не имя пользователя. Есть разница, что имя пользователя похоже на псевдоним. имя пользователя - это имя или имя пользователя. Этот код на самом деле работает как шарм, и я смог получить как имя, так и фамилию с учетом псевдонима и без необходимости иметь дело с Microsoft Graph или любыми другими API.

Я думаю, что из-за приведенного ниже кода вы не получаете новые учетные данные

string fullName = Request.ServerVariables["LOGON_USER"];

Вы можете попробовать пользовательскую страницу входа.

объявите приведенный ниже код на своей странице просмотра / _Layout.cshtml:

      @using System.DirectoryServices.AccountManagement

@{
    var context = new PrincipalContext(ContextType.Domain);
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
    var userName = @principal.GivenName + " " + @principal.Surname;
}
Другие вопросы по тегам