2016-02-03 4 views
0

У меня есть веб-приложение веб-форм asp.net 4.5, развернутое на удаленном сервере IIS7 +, и я хочу, чтобы домен \ имя пользователя пользователя заполнил столбец базы данных.Как получить пользователя Windows в asp.net webApp на IIS7 +

Мой web.config имеет следующее:

<system.web> 
    <authentication mode="Windows" /> 
    <identity impersonate="true" /> <!-- I have tried with and without impersonate--> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    ...other stuff 
</system.web> 
<system.webServer> 
    <security> 
    <authentication> 
     <anonymousAuthentication enabled="false" /> 
     <windowsAuthentication enabled="true" /> 
    </authentication> 
    </security> 

    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 

Вот некоторые из вещей, которые я попробовал:

String username = Membership.GetUser().UserName; 
       = HttpContext.Current.User.Identity.Name; 
       = Page.User.Identity; 
       = User.Identity.Name; 
       = Environment.Name; // Or something similar to this I don't remember exactly. 

Другие вещи, чтобы отметить:

для Windows аутентификация включена на сервере для моего веб-приложения.

Я использую имя сервера вместо имени пользователя.

Кроме того, для моего веб-приложения нет входа в систему. Пользователи имеют ограниченный доступ к серверу, но если они могут получить доступ к серверу, они автоматически получают доступ к моему веб-приложению.

[UPDATE]

Интересный прорыв, если бы я сделать инлайн

<% Response.Write(HttpContext.Current.User.Identity.Name.ToString()); %> 

затем MYDOMAIN \ имя пользователя записывается на моей странице. Однако, если я делаю ту же сторону сервера кода, он возвращает имя сервера. Почему бы ему вернуть что-то другое?

Я пробовал приведенный ниже код, но он по-прежнему возвращает имя сервера, я предполагаю его, потому что встроенный клиент работает на стороне клиента, а элементы управления работают на стороне сервера.

<asp:Label ID="LabelID" Text=" <% HttpContext.Current.User.Identity.Name.ToString(); %>" /> 

затем в CodeBehind

String curUser = LabelID.Text; 

ответ

0

См: http://forums.asp.net/t/1121780.aspx?Getting+a+users+DOMAIN+username+from+a+web+application

Чтобы получить текущее имя идентификатор пользователя на страницу использования asp.net Aspx

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

Чтобы получить фактическое кто вошел в систему, использует любой из них:

HttpContext.Current.User.Identity.Name 
Page.User (wraps HttpContext.Current.User.Identity.Name) 
Request.ServerVariables("logon_user") 

Вы, вероятно, также потребуется:

impersonate=true 

в вашей сети.конфигурационный файл

Это сообщение может также помочь вам: Built-in helper to parse User.Identity.Name into Domain\Username

[EDIT] Это сообщение показывает, что происходит под одеялом в IIS 7: How to get at the current users windows identity

Этот пост будет, мы надеемся, также даст вам представление о том, что результаты вашего проб и ошибок означают: How to get Windows user name when identity impersonate="true" in asp.net?

Вам также может понадобиться следующее в вашем web.config

<authorization> 
    <deny users = "?" /><!-- This denies access to the Anonymous user --> 
    <allow users ="*" /><!-- This allows access to all users --> 
</authorization> 

[EDIT2] поведение вы наблюдаете означает, что вы выполняете

HttpContext.Current.User.Identity.Name 

На что вы звоните «на стороне сервера» слишком рано в обработке приложений трубопровода жизненного цикла IIS в то есть до того аутентификации имеет место.

Response.Write( 

является одним из последних аспектов жизненного цикла приложения. Взгляните на документацию по жизненному циклу Microsoft IIS7: http://msdn.microsoft.com/en-us/library/bb470252.aspx

  1. Подтвердить запрос.
  2. Выполнение сопоставления URL.
  3. Поднять событие BeginRequest.
  4. Поднять событие AuthenticateRequest.
  5. Поднять событие PostAuthenticateRequest.
  6. Поднять событие AuthorizeRequest.
  7. Поднять событие PostAuthorizeRequest. ...

Его только после этого, что он действительно будет безопасно сделать обработку, необходимую для

+0

До сих пор ни один из них не работал. Все они возвращают имя пользователя admin. Я дважды проверяю с помощью администратора окна, чтобы убедиться, что анонимный доступ отключен на сервере, но я уверен, что это так. Любые другие идеи? –

+0

Вы пытались выполнить решение в верхнем звене: т. Е. <авторизация> Jon

+0

Я попытался это безрезультатно. Кроме того, я не совсем понимаю ответ в ссылке «Как ...». –

Смежные вопросы