Как получить имя пользователя с помощью аутентификации 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;
}