2009-02-24 10 views
5

El sitio web que estoy desarrollando permitirá a los usuarios iniciar sesión en 3 niveles.¿Cuál es la mejor manera de desarrollar un sistema de autenticación/inicio de sesión personalizado en ASP.NET

Nivel 1 - No registrado

Nivel 2 - Se registran su dirección de correo electrónico y recibir un correo electrónico de confirmación, e identificarse de esa manera.

Nivel 2: inician sesión con un nombre de usuario/contraseña, que luego se envía a un servicio web. Si el servicio web regresa con un resultado de "inicio de sesión exitoso", inician sesión en el sitio web.

Dependiendo del nivel de inicio de sesión, algunas páginas web estarán disponibles, mientras que otras estarán restringidas.

Mi pregunta es, ¿cómo debo desarrollar esto?

Estoy haciendo el proyecto en ASP.NET MVC.

¿Debo simplemente codificar mi propio AccountController? ¿Debo usar Autenticación de formularios .NET? ¿Cuál es el beneficio de Autenticación de formularios en vez de hacerlo manualmente con el código .NET?

Si lo hice yo mismo, en el inicio de sesión exitoso, me gustaría almacenar el usuario conectado en una variable de sesión. ¿Hay algún daño al hacer esto, o por lo que estoy haciendo, está bien?

+0

¿Cuál es el método de autenticación que está buscando? – Suroot

+0

Bueno, en este momento estoy buscando crear mi propio AccountController desde cero, con un método "LogIn" que acepte "emailaddress" como parámetro. Si el emailaddress está en el DB, establece la variable de sesión "CurrentUser" en ese registro DB. ¿Hay alguna razón para no hacerlo de esta manera? – Jonathan

Respuesta

1

Recomendaría encarecidamente no rodar su propio sistema de autenticación. .net Forms auth es tan fácil también uso; ¿Por qué perderías el tiempo construyéndolo tú mismo? Hay muchas trampas para los sistemas de autenticación y, a menos que sea MS, realmente no tiene los recursos para construir y probar uno.

Determinar qué páginas puede ver el usuario es la autorización y que ciertamente puede codificar a su manera. Sugiero que busque en las interfaces Identity/Principal que están disponibles en .net y anule el método "IsInRole" para satisfacer sus necesidades.

Las sesiones no son realmente buenas para la seguridad. No funcionan bien en los escenarios de las granjas web y cuando el grupo de aplicaciones decide reciclar ... todos los usuarios se desconectan. .net auth usa cookies por defecto.

+0

Digo que es mucho más fácil implementar su propio sistema que tratar de entender cómo funciona la membresía de ASP.NET. Además, no quiero literalmente cientos de tablas innecesarias, vistas y procedimientos almacenados que admitan la membresía de ASP.NET para que residan en mi base de datos. – User

0

En su caso, le recomendaría usar Autenticación de formularios simple. (Ver How to: Implement Simple Forms Authentication). Un simple LoginController podría manejar esto.

No hay nada "incorrecto" en el almacenamiento de los datos del perfil de usuario en la Sesión, pero esto puede ocasionar problemas de escalabilidad si alguna vez necesita balancear la carga de su sitio web. El método recomendado es implementar un RoleProvider personalizado. (Ver Implementing a Role Provider.)

En cuanto al control de acceso, quizás pueda tener una clase BaseController que verifique el rol actual del usuario para ver qué tipo de acceso tiene.

1

Sugeriría que la mejor manera de escribir su propio sistema de membresía/autenticación personalizado es realmente usar la clase MembershipProvider incorporada en .NET, y derivar su propia clase personalizada de eso.¡Siempre puede crear su propio Proveedor de membresía heredando de la clase System.Web.Security.MembershipProvider (y Role y classes también!) Dentro de .NET Framework y proporcionar su propia implementación específica. De esta forma, obtendrá el beneficio de utilizar un "marco base" sólido y confiable sobre el cual construir su sistema de autenticación y autorización.

Al derivar su Proveedor de Membresía personalizado por la propia clase base del marco, puede aprovechar muchas de las excelentes características del sistema de membresía de ASP.NET que están incorporadas, como la autorización declarativa en el archivo web.config y el tickets incorporados de autenticación ASP.NET. Respondí una pregunta similar here que detalla algunos de estos beneficios.

Debo admitir que una cosa que encontré inusual por su omisión en los proveedores de membresía incorporados "estándar" en ASP.NET fue la falta de una manera simple de permitir a los usuarios registrarse en un sitio web pero no a " valide "su cuenta de inmediato, sino que envíe al usuario un correo electrónico que contenga un" enlace de validación "en el que debe hacer clic antes de que se le permita el acceso al sitio web. Si bien esta no es una característica estándar dentro de la clase ASP.NET MembershipProvider, es relativamente fácil de implementar.

Hay una gran serie de artículos escritos por Scott Mitchell con respecto a los proveedores de pertenencia, función y el perfil de ASP.NET (uno de ellos en la validación de una cuenta por correo electrónico antes de permitir el inicio de sesión) que se puede encontrar aquí:

Examining ASP.NET 2.0's Membership, Roles, and Profile

que debería ser de ayuda si obtiene su propio proveedor personalizado de los proveedores de ASP.NET.

Cuestiones relacionadas