Как HttpContext.Current.User.Identity.Name узнает, какие имена пользователей существуют?
Это не обязательно проблема, мне просто интересно, как это работает. У меня есть метод:
public static bool UserIsAuthenticated()
{
bool isAuthed = false;
try
{
if (HttpContext.Current.User.Identity.Name != null)
{
if (HttpContext.Current.User.Identity.Name.Length != 0)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
isAuthed = true;
string MyUserData = ticket.UserData;
}
}
}
catch { } // not authed
return isAuthed;
}
HttpContext.Current.User.Identity.Name
возвращает null
, если пользователь не существует, но как же это знать, какие имена пользователей существует или не существует?
Ответы
Ответ 1
HttpContext.Current.User.Identity.Name возвращает ноль
Это зависит от того, установлен ли режим аутентификации Forms или Windows в вашем файле web.config.
Например, если я напишу аутентификацию следующим образом:
<authentication mode="Forms"/>
Тогда, поскольку режим аутентификации = "Формы", я получу ноль для имени пользователя. Но если я изменю режим аутентификации на Windows, вот так:
<authentication mode="Windows"/>
Я могу снова запустить приложение и проверить имя пользователя, и я получу имя пользователя успешно.
Для получения дополнительной информации см. System.Web.HttpContext.Current.User.Identity.Name против System.Environment.UserName в ASP.NET.
Ответ 2
Для проверки подлинности Windows
выберите свой проект.
Нажмите F4
Отключите "Анонимную аутентификацию" и включите "Аутентификация Windows"
![enter image description here]()
Ответ 3
Также проверьте, что
<modules>
<remove name="FormsAuthentication"/>
</modules>
Если вы обнаружили что-то вроде этого, просто удалите:
<remove name="FormsAuthentication"/>
Линия из web.config, и здесь вы идете, она будет работать нормально, я ее протестировал.
Ответ 4
Предположим, что сетевое окружение, в котором "пользователь" (он же вы) должен войти в систему. Обычно это идентификатор пользователя (UID) и пароль (PW). Хорошо, тогда какова ваша личность или кто вы? Вы UID, и это собирает это "имя" из вашего сеанса входа. Просто! Он также должен работать в интернет-приложении, которое требует от вас входа в систему, например, Best Buy и другие.
Это извлечет мой UID или "Имя" из моего сеанса, когда я открою страницу по умолчанию веб-приложения, которое мне нужно использовать. Теперь, в моем случае, я являюсь частью домена, поэтому я могу использовать начальную аутентификацию Windows, и она должна подтвердить, кто я, таким образом, 2-я часть кода. Что касается проверки подлинности с помощью форм, она будет полагаться на билет (скорее всего, cookie), отправленный на вашу рабочую станцию /компьютер. И код будет выглядеть так:
string id = HttpContext.Current.User.Identity.Name;
// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);
Теперь он имеет название моей компании (он же UID) и может отображать его на экране.
Ответ 5
Как [HttpContext.Current.User] узнает, какие имена пользователей существуют или не существуют?
Давайте рассмотрим пример того, как это работает. Предположим, вы используете проверку подлинности с помощью форм и происходит событие "OnAuthenticate". Это событие происходит " когда приложение аутентифицирует текущий запрос " (источник ссылки).
До этого момента приложение не знает, кто вы.
Поскольку вы используете проверку подлинности с помощью форм, сначала она проверяется путем анализа файла cookie проверки подлинности (обычно .ASPAUTH) с помощью вызова ExtractTicketFromCookie
. Это вызывает FormsAuthentication.Decrypt
(Этот метод является публичным; вы можете вызвать его самостоятельно!). Затем он вызывает Context.SetPrincipalNoDemand
, превращая куки в пользователя и Context.User
его в Context.User
(источник ссылки).
Ответ 6
выберите свой проект.
Нажмите F4
Отключите "Анонимную аутентификацию" и включите "Аутентификацию Windows"