Достаточно (HttpContext.Current.User! = Null), чтобы предположить, что FormsAuthentication прошла проверку подлинности пользователя - PullRequest
15 голосов
/ 21 января 2009

В приложении ASP.NET (2.0) я использую FormsAuthentication.

В методе Global.asax / Application_AuthenticateRequest я проверяю, является ли HttpContext.Current.User нулевым.

Достаточно ли этого, чтобы знать, существует ли файл cookie проверки подлинности форм, срок действия билета не истек, и в целом, что механизм проверки подлинности форм выполнил свою работу по проверке пользователя?

Мне это нужно, потому что у меня есть определенные страницы в этом приложении, которые иногда не требуют аутентификации для доступа (на основании некоторых критериев), и я помещаю их в отдельную директиву «location» в web.config с чтобы исключить их из проверки подлинности «поймать все».

т.е. Я пытаюсь проверить в Application_AuthenticateRequest, нуждается ли защита страницы, к которой получен доступ в этом «местоположении», и, если да, узнать, прошел ли уже аутентификацию пользователя, или мне нужно перенаправить в Logon.

РЕДАКТИРОВАТЬ: Как показывают ответы, скорее всего, я пойду с IsAuthenticated. Чтобы я мог лучше понять это, вот два бонусных вопроса :) (пожалуйста, отредактируйте другие ответы, чтобы добавить их, спасибо):

  1. Можно ли предположить, что если IsAuthenticated имеет значение true, то HttpContext.Current.User наверняка будет содержать имя пользователя для аутентифицированного пользователя?

  2. Как я могу получить "анонимного пользователя" в HttpContext.Current.User, если принудительная аутентификация FormsAuthentication и только несколько страниц исключены с директивой "location"?

Ответы [ 4 ]

29 голосов
/ 21 января 2009

Нет, User может быть просто ссылкой на анонимного пользователя. Чек HttpContext.Current.Request.IsAuthenticated.

3 голосов
/ 21 января 2009

Я обычно использую Request.IsAuthenticated. Я не могу сказать вам, должен ли ваш подход работать или нет. Звучит так, как должно, хотя у вас могут быть побочные эффекты, если вы поддерживаете анонимный вход?

1 голос
/ 21 января 2009

Кроме того, убедитесь, что контекст также не является нулевым (если вы работаете в httpmodule).

1 голос
/ 21 января 2009

Хороший вопрос: в дополнение к ответам, которые дали другие, я бы посоветовал вам взглянуть на эту статью на сайте 4GuysFromRolla .

...