2009-03-13 19 views
5

He estado programando durante mucho tiempo, pero no soy el desarrollador más experimentado del mundo. Hace poco recogí un proyecto que usa la autenticación de formularios para su sitio web. Primero busqué la autenticación de formularios en .Net 1.1 y en ese momento tenía algunas limitaciones que me hicieron decidir no utilizarla como mi principal forma de autenticación.Autenticación de formularios

Este proyecto requiere que los usuarios tengan funciones (que entiendo que admite formularios de autenticación) y membresías de grupo. Por ejemplo, "Usuario A" es un "Administrador" para "Empresa A". ¿La autenticación de formularios ahora admite este tipo de estructura de usuario?

También he leído que la autenticación de formularios devuelve las contraseñas como texto sin formato. Este cliente no usa SSL. ¿Es esto cierto?

La base de código actual usa autenticación de formularios, pero no admite grupos (sí admite roles). Por lo tanto, necesito modificar la autenticación de formularios para admitir los grupos requeridos o extraer la autenticación de formularios y usar el marco de autenticación que normalmente uso. Si la autenticación de formularios admite grupos y es lo suficientemente segura, entonces debería seguir con eso. Si la autenticación de formularios tiene problemas de seguridad o no admite grupos, entonces necesito eliminar esa forma de autenticación.

He buscado en Internet un artículo de pros y contras, pero no tuve suerte. ¿Qué piensan ustedes?

+0

¿Está usted obligado a .net 1.1? – Stormenet

+0

No, puedo usar 2.0 o 3.5. Es solo que no he vuelto a aprender autenticación de formularios después de haber decidido inicialmente que no me gustaba en 1.1. Por lo que he leído, ahora se ve mejor, pero primero pensé en obtener opiniones al respecto. – mlindegarde

Respuesta

5

Para satisfacer sus necesidades, utilizará la Autenticación de formularios con Membership. Si su aplicación está utilizando la base de datos de SQL Server, puede usar SQLMembershipProvider como proveedor de membresía para lograr esto.

Examining ASP.NET 2.0's Membership, Roles, and Profile puede ser una buena referencia de inicio.

Acerca de su preocupación sobre el envío de contraseñas como texto sin formato cuando la conexión no está asegurada.

En realidad, las contraseñas que se envían usualmente son hash (el algoritmo dependerá del proveedor de membresía elegido) y eso es lo que eventualmente se almacena. Por supuesto, si la conexión no está asegurada, se puede recuperar y utilizar la contraseña hash para hackear la aplicación, pero al menos se elimina la posibilidad de que la contraseña de usuario simple sea robada y utilizada, p. para acceder a otro servicio (como usted sabe, muchas personas usan la misma contraseña en múltiples servicios). Para estar seguro, realmente necesita usar https aquí.

Como nota de advertencia, estoy lejos de ser un experto en ese campo, pero recientemente me enfrenté a un problema similar que usted está describiendo, así que pensé que podría encontrar algo útil.

+0

Para aclararlo un poco: las contraseñas se envían hash al Db. Las contraseñas no se envían al navegador, solo se reciben cuando se envía el formulario de inicio de sesión (donde se necesita https).El proveedor de roles no maneja su función/requerimiento de la empresa, ni el RoleProvider base (aunque puede obtener información inteligente en él Admin-CompanyA :)). – eglasius

+0

Gracias por el enlace, muy informativo. Haría un "Voto", pero aún no tengo una reputación lo suficientemente alta como para hacerlo. – mlindegarde

+0

@Freddy - gracias por los punteros - Debo aprender a no responder a las preguntas en viernes por la tarde - sobre todo si es el viernes 13;). Voy a editar mi respuesta cuando encuentre algo de tiempo libre – kristof

1

La autenticación de formularios no devuelve las contraseñas como texto sin formato. Siempre que se asegure de que el inicio de sesión/pwd esté protegido al recibirlo (es decir, que use https ... ssl), no existe ningún riesgo de seguridad.

Si realmente necesita hacer la autorización de esa manera, puede confiar en la autenticación de formularios para ... la autenticación y autorizar con su propio mecanismo.

+0

Como mencioné, no están usando HTTPS/SSL, así que esa era mi preocupación; sin embargo, supongo que se envía al servidor como texto del plan independientemente. Estaba pensando que podría usar la autenticación de formularios y luego hacer mi propia autorización en función de la identificación proporcionada por la autenticación. – mlindegarde

+0

Puede hacer su propia autorización, pero la forma más fácil (no la única), le da el nombre de usuario en lugar del ID - HttpContext.Current.User.Identity.Name (después de haber iniciado sesión). – eglasius

1

Formas de autenticación es una excelente opción para lo que está buscando. Admite roles pero no admite grupos. Sin embargo, sí tiene soporte integrado para la integración de directorio activo, que puede usar para alentar el problema del grupo, si es necesario. Personalmente, me quedaré con lo que tienes y aprender más sobre él. Si desea utilizar el modo Formularios de autenticación de formularios en lugar de modo de autenticación de AD, consideraría recurrir a la compatibilidad de grupos utilizando la base de datos de autenticación de formularios existente.

Recomiendo ver videos these de Microsoft sobre autenticación de formularios. Descubrirá que es bastante fácil de usar. Por supuesto, no es algo que puedas unir ya que es un marco bastante robusto y flexible. Querrá leer y ver estos videos. Sin embargo, cuando te familiarices con él, verás que es seguro, compatible y muy aceptado por la comunidad de desarrollo.

Yikes, Acabo de volver a revisar su pregunta y ha dicho que no usan SSL. ¿Qué tan seguro debe ser este sitio? Para mí, esa sería mi primera tarea: ¡pasar a SSL!

+0

Es importante tener en cuenta que esta es una aplicación de Internet (no intrAnet). ¿Todavía puede usar Active Directory cuando los usuarios se registran para el sitio web a través de Internet? No soy un experto en seguridad de Windows, pero pensé que Active Directory solo era para una intranet. – mlindegarde

+0

Sí, puede usar un bosque de AD orientado hacia el exterior y autenticarse en él. –

0

el db no almacena el texto simple de la contraseña usa md5 o algún otro medio de hash ... sé que están haciendo coincidir 2 cadenas hash entre sí para autenticar si convierten la cadena del lado del cliente o del servidor im no seguro ... es probable que sea su navegador ... si está pensando en usar SSL no creo que deba usar formularios ASP.net auth ... es hora de que haga sus propios formularios basados ​​en auth y se sumerja en la minería de anuncios. ...

1

Autenticación de formularios no admitirá grupos de forma nativa. Lo que hacemos es usarlo para "autenticar" a un usuario (demostrar quiénes son) y luego usamos nuestros propios almacenes de datos para "autorizar" a un usuario (describir lo que puede hacer).

0

Gracias por toda la información. Aunque creo que continuaré utilizando mi propia biblioteca de autenticación en otros proyectos, creo que lo mejor que puede hacer este cliente es seguir con la autenticación de formularios que ya tiene parcialmente implementada.

Aunque desarrollo con Visual Studio y la plataforma .Net, no siempre me gusta hacer las cosas al estilo "Microsoft". Encuentro que muchas veces la forma "Microsoft" introduce una gran cantidad de gastos generales que se pueden evitar si sabes lo que estás haciendo.

Gracias de nuevo por la entrada.

+0

Bueno, afortunadamente nadie te obliga a usar algo aquí. –

0

Las contraseñas deben pasar texto sin cifrar por cable si no está utilizando SSL. De ahí la necesidad de SSL.

.Net Forms Authentication hiere correctamente y almacena la contraseña en el db, pero esto no protegerá las credenciales a través del cable. Pero esto es cierto para todos los frameworks web.

En cuanto a la parte del grupo de esto, tendrás que implementar esto en tu aplicación o buscar algunas bibliotecas para ayudarte.

Cuestiones relacionadas