Путаница с олицетворением, аутентификацией и авторизацией в web.config - PullRequest
0 голосов
/ 14 июня 2011

Я пытаюсь получить имя пользователя для входа в Windows для текущего пользователя в моем проекте на сайте asp.net.

мой файл web.config содержит следующие элементы

        <identity impersonate="true"/>
        <authentication mode="Forms">
            <forms name="app" path="/path" loginUrl="/path/login.aspx" protection="All" timeout="100" />
        </authentication>
        <authorization>
            <deny users="?" />
                <allow users="*"/>
        </authorization>

Насколько я понимаю, с этой конфигурацией я смогу получить Домен \ имя пользователя из WindowsIdentity.GetCurrent().Name. Однако это свойство возвращает NT AUTHORITY \ IUSR, который является пользователем для анонимного доступа. Если я не ошибаюсь, я запрещаю анонимный доступ к сайту в разделе авторизации. Чего мне не хватает?

Также примечание:

System.Web.HttpContext.Current.Request.LogonUserIdentity.Name также возвращает NT AUTHORITY \ IUSR, а Request.ServerVariables["LOGON_USER"] возвращает пустую строку, что противоречит информации, найденной в этой статье базы знаний http://support.microsoft.com/kb/306359

Я использую .net 4.0 и среду разработки для Windows 7.

Некоторые ресурсы, которые привели меня к этому моменту:

http://msdn.microsoft.com/en-us/library/ff647076.aspx

http://support.microsoft.com/kb/306158

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

Спасибо за ваше время.

Редактировать

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

1 Ответ

3 голосов
/ 14 июня 2011

Если вы используете проверку подлинности с помощью форм, то олицетворение бессмысленно - оно работает только с проверкой подлинности Windows. То же самое относится и к Request.ServerVariables ["LOGON_USER"].

Причина, по которой вы видите IUSR_, заключается в том, что это учетная запись Windows, на которой работает веб-сайт, вместо этого следует использовать Page.CurrentUser (WebForms) или свойство User (MVC Controllers) без приведения. Это вернет имя пользователя Forms Auth.

...