Подтвердить что ты не робот

Как 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, если пользователь не существует, но как же это знать, какие имена пользователей существует или не существует?

4b9b3361

Ответ 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"