В приложении 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»?

15
Sunny Milenov 21 Янв 2009 в 21:46
Я предпочитаю, когда учетные данные пользователя являются единственным решающим фактором при авторизации доступа к ресурсу. Возможно, вы могли бы разделить функциональность на две разные страницы и позволить ASP.NET обеспечивать безопасность?
 – 
Greg
21 Янв 2009 в 22:26

4 ответа

Лучший ответ

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

29
bdukes 21 Янв 2009 в 21:51
Спасибо. У меня возникла идея использовать «стандартный» способ, но как побочный вопрос - как это может быть «анонимный» пользователь?
 – 
Sunny Milenov
21 Янв 2009 в 21:57
2
Если веб-сайт разрешает анонимный доступ (то есть не используется даже обычная проверка подлинности), то пользователь считается анонимным. IIS обычно назначает «пользователя», когда кто-то прибывает таким образом, но для него установлено значение IUSR_MachineName или что-то еще.
 – 
Dillie-O
21 Янв 2009 в 22:11

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

3
Kevin Pang 21 Янв 2009 в 21:51

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

1
Mark Brittingham 21 Янв 2009 в 21:51

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

1
ccook 21 Янв 2009 в 22:06