2009-03-31 10 views
19

¿Hay alternativas \ mods a la membresía .net?Alternativas a la membresía de .Net

Lo encuentro bastante restrictivo;

  • Cant cambio Nombre de usuario, fácilmente. Tienes que crear un nuevo usuario y copiar los campos, pero luego pierdes la clave principal O tienes que editar la tabla de usuarios directamente.

  • Los campos de perfil adicionales se almacenan juntos como un blob.

Respuesta

13

La pertenencia a ASP.Net utiliza un modelo de proveedor. Eso significa que usted es completamente libre de implementar su propio proveedor de membresía, o incluso heredar y extender un proveedor existente, siempre y cuando siga el provider contract.

Más uno para preguntar acerca de las alternativas existentes en lugar de intentar construir algo nuevo por su cuenta.

0

En lo que se refiere a cambiar el nombre de usuario, eso se puede lograr fácilmente utilizando el método CreateNewUser() y rellenando los campos apropiados en función del Usuario actual, y luego eliminando al usuario actual.

Los campos de perfil no son parte del modelo de Proveedor de Membresía .NET, sino que forman parte del Proveedor de Perfil. Este es un tema muy debatido y para la mayoría de las máquinas de producción, la forma correcta de hacerlo es incluir una solución de proveedor de mejor perfil, como esta Table Profile Provider, que almacena los campos de perfil como es de esperar, en lugar de como un blob de memoria. . Alternativamente, puede transferir fácilmente su propio proveedor de perfiles, consulte el instructions here.

Sin duda hay alternativas de membresía .NET, pero la mayoría tienen errores o tienen un pequeño conjunto de características. Realmente apesta desarrollar uno por dos meses y luego darse cuenta de que no admitirá toda la funcionalidad que necesita. La membresía .NET es una solución comprobada y es por eso que se usa con tanta frecuencia.

+2

Si crea nuevo usuario también generará nuevo ID para ella, ¿verdad? No es bueno si el usuario ya está referenciado por otras tablas. – XOR

+0

No, pero es bastante fácil de arreglar en su método para "cambiar" el nombre de usuario. – JoshJordan

0

En cuanto al perfil, hay un par de alternatives out there. Estos dos usan una tabla o le permiten llamar a un procedimiento almacenado. Por supuesto, también puedes implementar el tuyo. Personalmente me cansé de usar los proveedores de perfiles, y descubrí que lidiar con el perfil en mi código era más fácil de controlar y contener.

En cuanto a los otros problemas, también puede implementar su propio proveedor. Microsoft lanzó el código fuente a los proveedores SQL para que pueda darle un punto de partida.

+0

¿Podría explicar por qué no utilizó un modelo de proveedor de perfiles? – kseen

2

Como el modelo de membresía de ASP.NET se basa en proveedores, hay varias alternativas disponibles.

De forma predeterminada, los usuarios tienen ProviderUserKey, que es un GUID, y esa es la clave principal de la base de datos, por lo que debería poder escribir algo para cambiar su nombre de usuario si así lo desea.

En términos del perfil, sí, el blob predeterminado es bastante molesto. Puede echar un vistazo al SQL Table Profile Provider que mapea perfiles en tablas, o bastante rápido roll your own.

+0

@Dan - Por ID de usuario, me refería a los PK en las tablas de base de datos aspnet_Membership y aspnet_users, que de hecho se llaman UserId –

8

Voy a seguir adelante y hacer una lista de mi alternativa aquí. He rodado mi propia biblioteca de autenticación, y creo que es lo suficientemente impresionante como para ser lanzada al público ... Así que lo hice. Está diseñado para mantenerse fuera de su camino y, en general, es bastante minimalista. No proporciono muchos controles de usuario listos para usar, pero en la mayoría de los sitios web que he visto esos controles de usuario incorporados nunca se usan.Por lo tanto, en lugar de tratar de hacer controles de usuario aún más flexibles, decidí, en cambio, simplificarlo para crear sus propios controles de inicio de sesión y demás.

El proyecto se llama Autenticación rápida, segura y concisa, o FSCAuth para abreviar. Tiene licencia BSD. Puede descargarlo al Binpress o al Bitbucket

Su modelo flexible de "UserStore" (el equivalente de proveedor del Formulario) le permite formar su base de datos de cualquier manera que desee. Puede admitir archivos de texto sin formato, XML, MongoDB, Sql Server y cualquier punto intermedio.

He aquí una lista de las cosas en las que creo que sobre todo se destaca sobre la autenticación de formularios:

  • sistema de autenticación sin estado. No es necesario realizar un seguimiento de las sesiones de usuario en la base de datos o la memoria. Esto hace que sea trivial escalar a varios servidores que requieren pocos cambios (si los hay) en su código de autenticación
  • Use cualquier cosa como ID único para cada usuario. Así es, ¡no más GUID! Cualquier cosa que encaje en una cadena es el juego limpio
  • HTTP Basic Authentication horneado. Puede habilitar la Autenticación básica solo en las páginas que desee (o globalmente) y puede hacer las mismas llamadas como si estuvieran usando el típico sistema de cookies. autenticación
  • Difícil de inseguridad. Debido a la forma en que funciona y le dejo el código de núcleo más pequeño posible al usuario final para que realmente realice la autenticación, es extremadamente seguro y se mantendrá así a menos que realmente intente romperlo. Manejo las cookies, HTTP Basic Auth y todos los hash. Le da a FSCAuth una base de datos para ponerlo.
  • El soporte de BCrypt para hash es trivial. How to do it.. En la autenticación de formularios es almost not possible
  • me gusta :)

Por supuesto también es deficiente, y para ser justos voy a incluir algunas cosas que faltan

  • Autenticación de archivos estáticos en IIS 6 no es posible (todavía)
  • No hay prevención de fuerza bruta (aún). Esto significa que deberá asegurarse de que la misma persona no intente acceder a su página de inicio de sesión 200 veces en 2 segundos.
  • No está integrado en ASP.Net
  • Sin Windows o la autenticación de Passport (sin planes de añadir cada vez)