Достаточно (HttpContext.Current.User! = Null), чтобы предположить, что FormsAuthentication аутентифицировал пользователя

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

В методе Global.asax / Application_AuthenticateRequest я проверяю, имеет ли HttpContext.Current.User значение null.

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

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

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

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

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

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


person Sunny Milenov    schedule 21.01.2009    source источник
comment
Я предпочитаю, когда учетные данные пользователя являются единственным решающим фактором при авторизации доступа к ресурсу. Возможно, вы могли бы разделить функциональность на две разные страницы и позволить ASP.NET обеспечивать безопасность?   -  person Greg    schedule 21.01.2009


Ответы (4)


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

person bdukes    schedule 21.01.2009
comment
Спасибо. У меня возникла идея использовать стандартный способ, но как побочный вопрос - как это может быть анонимный пользователь? - person Sunny Milenov; 21.01.2009
comment
Если веб-сайт разрешает анонимный доступ (то есть не используется даже обычная проверка подлинности), то пользователь считается анонимным. IIS обычно назначает пользователя, когда кто-то прибывает таким образом, но для него установлено значение IUSR_MachineName или что-то еще. - person Dillie-O; 21.01.2009

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

person Kevin Pang    schedule 21.01.2009

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

person Mark Brittingham    schedule 21.01.2009

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

person ccook    schedule 21.01.2009