Как получить у текущих пользователей Windows identity

сайт работает на моем локальном IIS 6.1. Я хотел бы добавить некоторые функции, чтобы вытащить информацию из нашего объявления. Мой рекламный код работает во многих других проектах и на моем dev-сервере. Вот мои попытки написать имя пользователя:

Response.Write("1. " + this.Request.LogonUserIdentity.Name);
Response.Write("2. " + Request.ServerVariables["Auth_User"]);
Response.Write("3. " + WindowsIdentity.GetCurrent().Name.ToString());

результаты, которые я получаю:

  1. НТОРГАН ЗАПИСИ IUSR
  2. администратор
  3. NT AUTHORITYNETWORK SERVICE

Как я могу получить фактическое имя пользователя Windows, как ourdomain/имя пользователя

спасибо

5 ответов


этот фрагмент показывает, как LogonUserIdentity установлен (с помощью рефлектора)

 if ((this._wr is IIS7WorkerRequest) && (((this._context.NotificationContext.CurrentNotification == RequestNotification.AuthenticateRequest) && !this._context.NotificationContext.IsPostNotification) || (this._context.NotificationContext.CurrentNotification < RequestNotification.AuthenticateRequest)))
        {
            throw new InvalidOperationException(SR.GetString("Invalid_before_authentication"));
        }
        IntPtr userToken = this._wr.GetUserToken();
        if (userToken != IntPtr.Zero)
        {
            string serverVariable = this._wr.GetServerVariable("LOGON_USER");
            string str2 = this._wr.GetServerVariable("AUTH_TYPE");
            bool isAuthenticated = !string.IsNullOrEmpty(serverVariable) || (!string.IsNullOrEmpty(str2) && !StringUtil.EqualsIgnoreCase(str2, "basic"));
            this._logonUserIdentity = CreateWindowsIdentityWithAssert(userToken, (str2 == null) ? "" : str2, WindowsAccountType.Normal, isAuthenticated);
        }

как вы можете видеть это было изменено для IIS 7. Я считаю, что вы используете Аутентификация Windows + Олицетворение поэтому я бы пошел с последний (WindowsIdentity.GetCurrent()), С которым, я уверен, выполняется запрос идентификации.


здесь есть два разных пользователя windows-первый-ваш пользователь приложения, а второй-пользователь (или учетная запись windows), под которым ваш ASP.NET выполняется приложение (пул приложений с точки зрения IIS). WindowsIdentity.GetCurrent обычно возвращает эту ссылку.

чтобы получить фактического пользователя windows, который использует приложение, необходимо применить проверку подлинности. Для этого можно включить встроенную проверку подлинности (проверку подлинности windows) в IIS для указанного веб-узла. Также изменить твой ASP.NET настройка для использования проверки подлинности windows. Теперь вы можете использовать HttpContext.Current.User.Identity чтобы получить фактического пользователя.


HttpContext.Current.User.Identity может быть полезным для вас здесь.

дополнительно System.Threading.Thread.CurrentPrincipal могу помочь.

но дело может быть в том, что вам действительно нужно установить экземпляр идентификатора в качестве входа пользователя (хотя и не обязательно реализовать IPrincipal и окружающие механизмы, скорее используя встроенный WindowsIdentity реализации).

Я не 100% процентов на этом, аутентификация Windows может установить это автоматически для вас, чтобы просто получить.

также, проверьте эта ссылка из MSDN который описывает основные операции пользователя,


во-первых, убедитесь, что сайт находится в зоне интрасети (например, просто http://servername/ вместо http://www.servername.com/), или вам нужно добавить FQDN к параметрам безопасности надежных сайтов IEs.

во-вторых, если вы не используете зону интрасети, убедитесь, что IE отправляет учетные данные-инструменты - > Свойства обозревателя - > безопасность - > пользовательский уровень - > аутентификация пользователя - > вход -> автоматический вход с текущим именем пользователя и Пароль


пользователь входит на сайт, используя свой домен/имя пользователя AD, если так захватить имя пользователя/домен в этот момент?

Если нет, вы не сможете получить это, если случайный веб-сайт может захватить домен/имя пользователя текущего входа пользователей, что было бы огромной проблемой безопасности, не так ли?