2009-04-03 16 views
7

Uno de los requisitos propuestos para una aplicación ASP.NET es que tenemos el estado de sesión deshabilitado globalmente. (Esto no es negociable.)Autenticación de usuario sin estado de sesión en ASP.NET

Otro requisito es que tenemos algunos medios para la autenticación del usuario. Estoy pensando en usar el modelo de proveedor de membresía de ASP.NET.

¿Es posible tener autenticación de usuario sin estado de sesión?

Los ejemplos específicos de autenticación de usuario que buscamos son:

  • usuario va a la página web no autenticado
  • El usuario introduce la información de registro (campos de contacto, etc.)
  • Para el resto de la sesión , el usuario tiene acceso a cierto contenido gracias a su estado registrado

¿Hay alguna manera de hacer esto con las cookies?

¿Se puede hacer esto de forma segura, por lo que la cookie no se puede falsificar fácilmente?

¿Hay funcionalidad incorporada en ASP.NET para soportar esto, o tendremos que implementar nuestro propio método?

Respuesta

12

La autenticación de formularios de ASP.NET no utiliza SessionState. Utiliza una cookie para almacenar el ticket de autenticación.

También puede forzar que el ticket de autenticación se envíe a través del canal SSL editando el archivo web.config.

Toda la funcionalidad que necesita está disponible incorporada en ASP.NET.

http://msdn.microsoft.com/en-us/library/aa480476.aspx

+0

Excelente ... parece que necesito validaciónKey y decryptionKey deben ser idénticos en todos los servidores de la granja de servidores web para que esto funcione. – frankadelic

+0

si está en una granja de servidores web, sí. –

0

Sí, se puede utilizar cookies.

El problema con las cookies, es que no puede persistir mucha información sobre ellas. Para el registro de tipo de asistente, almaceno los datos en la base de datos y luego almaceno la clave de fila/Id en una cookie encriptada. De esta forma, cuando el usuario pasa al siguiente paso puede recuperar los datos de la base de datos.

Para las cookies, puede marcar el tiempo y encriptar los valores de las cookies. Normalmente no administro el estado de autenticación del usuario. Utilizo las clases integradas de FormsAuthentication para administrar ese aspecto de mis aplicaciones web.

Grandes sitios como: Myspace y Live Search Club, dependen únicamente de las cookies como administración estatal.

2

Claro, una cookie hará esto.

Piensa en los fundamentos. El estado de sesión es administrado por las cookies de todos modos.

Esto es lo que debes hacer.

Cuando inician sesión, toma su ID de usuario y un tiempo de espera (para que el inicio de sesión solo dure, por ejemplo, 30 minutos o lo que sea).

Toma esa cadena y hash it.

(java, aunque no es importante)

String cookie = userid + ":" + timeString + ":" + md5(userid + ":" + timeString + ":" + "secretpassword"); 

Entonces, cuando la petición acierta en su sitio, compruebe la cookie. Primero verifica la integridad.

String parts[] = cookie.split(":"); 
String newHash = md5(parts[0] + ":" + parts[1] + ":" + "secret password"); 
if (!newHash.equals(parts[2])) { 
    // boom, cheater! 
} 

A continuación, compruebe la secuencia de tiempo para ver si todavía están "iniciados" y continúe desde allí.

Asegúrate de hacer la hora para actualizar la cookie en cada solicitud.

+1

esto es una práctica bastante mala, en cuanto a la seguridad. Si la contraseña secreta se filtró una vez que cualquiera puede iniciar sesión en la aplicación. Y si es débil, puede romperse (especialmente cuando MD5 se está desvaneciendo). Si vas a hacer de esta manera, al menos utiliza un "secreto" aleatorio diferente para cada usuario. Eso sería mucho más seguro. –

+0

¿Cómo administrarías una sesión diferente de clave por usuario por autenticada? – yfeldblum

+0

Ese es un problema de control clave, usted tiene el mismo problema con cualquier encriptación. No me gusta MD5, elige SHA. Es un ejemplo de técnica. –

Cuestiones relacionadas