2009-01-21 10 views
14

En una aplicación ASP.NET (2.0) utilizo FormsAuthentication.Es (HttpContext.Current.User! = Null) suficiente para suponer que FormsAuthentication ha autenticado al usuario

En el método Global.asax/Application_AuthenticateRequest, compruebo si HttpContext.Current.User es nulo.

¿Es esto suficiente para saber si existe la cookie de autenticación de formularios, el ticket no ha caducado y, en general, que el mecanismo de autenticación de formularios ha hecho su trabajo para validar al usuario?

Necesito esto, porque tengo ciertas páginas en esa aplicación, que a veces no necesitan autenticación para acceder (según algunos criterios), y las pongo en una directiva de "ubicación" separada en web.config con Para excluirlos de la autenticación de "capturar todos".

I.e. Estoy intentando verificar en Application_AuthenticateRequest si la página a la que se accede en esta "ubicación" necesita protección o no, y si es así, para saber si el usuario ya se ha autenticado o si debo redireccionar al inicio de sesión.

EDITAR: Como las respuestas sugieren, lo más probable es que vaya con IsAuthenticated. Con el fin de que agarre mejor, aquí hay 2 preguntas de bonificación :) (por favor, edite otras respuestas para añadir estos, gracias):

  1. ¿Puedo asumir que si IsAuthenticated es cierto, entonces HttpContext.Current. El usuario seguramente tendrá el nombre de usuario para el usuario autenticado.

  2. ¿Cómo puedo terminar con un "usuario anónimo" en HttpContext.Current.User, si se aplica FormsAuthentication, y solo unas pocas páginas están excluidas con la directiva "location"?

+0

Lo prefiero cuando las credenciales del usuario son el único factor decisivo para autorizar el acceso a un recurso. ¿Quizás podría dividir la funcionalidad en dos páginas diferentes y permitir que ASP.NET maneje la seguridad? – Greg

Respuesta

28

No, el User podría ser solo una referencia para el usuario anónimo. Compruebe HttpContext.Current.Request.IsAuthenticated.

+0

Gracias. Me surgió la idea de utilizar la forma "estándar", pero solo como una pregunta complementaria: ¿cómo podría ser un usuario "anónimo"? –

+2

Si el sitio web permite el acceso anónimo (lo que significa que ni siquiera se utiliza la Autenticación básica), el usuario se considera anónimo. IIS normalmente asigna un "usuario" cuando alguien llega de esta manera, pero se establece en IUSR_MachineName u otra cosa. –

3

Normalmente uso Request.IsAuthenticated. No podría decirle si su enfoque debería funcionar o no. Suena como debería, aunque podría tener efectos secundarios si admite inicios de sesión anónimos.

1

Buena pregunta: además de las respuestas que otros han dado, le sugiero que eche un vistazo a este artículo en el sitio 4GuysFromRolla.

1

Como un aparte, asegúrese de verificar que el contexto no sea nulo también (en caso de que trabaje en un httpmodule).

Cuestiones relacionadas