HttpContext.Current.User.Identity.Name возвращает пустое значение
Я использую HttpContext.Current.User.Identity.Name, чтобы получить имя пользователя при использовании веб-приложения. Во время разработки я использовал свой локальный iis с включенной встроенной аутентификацией Windows, а также включенным и отключенным анонимным доступом, и я смог получить имя пользователя.
Теперь, когда я публикую веб-приложение, оно возвращается пустым. Настройка на опубликованном сервере такая же, и я попытался использовать Page.User.Identity.Name, который также вернулся пустым.
Кто-нибудь знает, почему это и как это исправить?
9 ответов
Вы, вероятно, включили анонимную аутентификацию, а также аутентификацию Windows. Выключить анонимный.
Так,
<system.web>
<authentication mode="Windows" />
</system.web>
В конфигурации IIS для приложения, посмотрите на вкладку Аутентификация
Set **Anonymous Authentication** to **Disabled** and
Set **Windows Authentication** to **Enabled**
Это должно работать, и Identity.UserName теперь должен отображаться правильно.
HttpContext.Current.Request.LogonUserIdentity.Name всегда работает для меня в среде VS 2012 и IIS 7
Чтобы решить эту проблему, вы должны включить функцию аутентификации Windows. Выполните следующие шаги:
-Нажмите Пуск, а затем нажмите Панель управления. Откройте группу "Программы".
-При программах и -Особенности нажмите кнопку Включить или отключить функции Windows.
-Разверните пункт, помеченный информационными службами Интернета.
-Разверните элемент с надписью World Wide Web Services.
-Развернуть пункт Безопасность ->
Убедитесь, что вы выбрали Windows Authentication
Также вам необходимо отключить анонимную аутентификацию в IIS следующим образом: -Выберите приложение в IIS -Дважды щелкните Аутентификация в группе IIS -Нажмите Анонимная аутентификация -Нажмите Отключить справа в разделе Действия. Надеюсь это поможет
Задавать <authentication mode="Forms">
в файле web.config и ваша проблема будет решена.
Протестируйте свой сайт, используя приведенный ниже код
if (Page.User.Identity.Name != "" )
{
Label1.Text = "Hello";
}
else
{
Response.Redirect("login.aspx?url=Upload.aspx");
}
При работе с WIF вы должны использовать Thread.CurrentPrincipal.Identity.Name вместо User.Identity.Name.
Подробнее читайте здесь: http://msdn.microsoft.com/en-us/magazine/ff872350.aspx чтобы узнать больше о Windows Identity Foundation
Подобный вопрос: User.Identity.Name является нулевым после аутентификации через WIF
Это не решит исходную запись, но все равно захочет поместить ее здесь на случай, если другие натолкнутся на это, когда ищут, почему user.identity ничего не возвращает...
В моем случае User.Identity начал ничего не возвращать после обновления имени пользователя и пользователя (в частности, имени пользователя до Windows 2000).
Кэш LSA на IIS был проблемой. Даже после перезапуска сервера IIS при устранении неполадок проблема не устранена. Это было до тех пор, пока добавленные настройки реестра, описанные здесь, проблема не была исправлена:
Правильный способ получить имя с помощью WindowsPrincipal. Я даю вам демо-код ниже
WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent());
string username = wp.Identity.Name;
- В IIS: нажмите на свой сайт .
- На домашней странице: Аутентификация .
- В меню «Действие»: « Открыть функцию » .
- Отключите анонимную аутентификацию .
- Перезапустите сайт .
Для пустого возврата мое решение оказалось web.config. Я использую Visual Studio 2010, и по умолчанию web.config не работает. Я заменил его на почти пустой web.config, а затем успех! Возможно, по умолчанию vs2010 web.config вызвал слишком много ссылок или неправильно настроил IIS для использования User.Identity.Name. Моя система - Windows7.
Веб-сайт asp.net по умолчанию web.config от vs2010 имел длину около 100-115 строк. Как вы можете видеть ниже, почти пустой web.config имеет длину около 20 строк.
web.config, который я использовал:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<allow roles="Doman Name\Group Name" users="" />
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<security>
<authorization>
<add accessType="Allow" users="" roles="Doman Name\Group Name" />
</authorization>
</security>
</system.webServer>
</configuration>