Re: [altnet-hispano] Seguridad por roles

126 views
Skip to first unread message

nelopa...@gmail.com

unread,
Nov 5, 2012, 9:56:30 AM11/5/12
to altnet-...@googlegroups.com
uff, creo que no hay "una" mejor opción... sino que depende de lo que necesites.

si no te sirven los componentes que ya vienen armados, una opción es que armes un HttpModule que remplace el User de HttpContext por el que necesites, pero depende mucho del escenario que tengas.

¿podrías contarnos como es el escenario de seguridad de tu aplicación?

saludos.
nelo.


2012/11/5 Manel <kale...@gmail.com>
Hola a todos
Tengo una duda con el tema de la seguridad en las aplicaciones asp.net.

No me termina de convencer ASP.Net Membership Provider ya que requiere un sql server y un modelo separado del modelo de mi base de datos. Además extender Membership Provider y Role Provider no me parece la mejor solución, mucho trabajo para tan solo querer una tabla de usuarios con Id, contraseña, otra con roles y poco más.

Simple Membership con ASP.NET MVC tiene buena pinta, pero me ata a sql server y aun no sé qué gestor de base de datos voy a utilizar

Mi pregunta es, ¿cual es la mejor opción para gestionar la seguridad de aplicaciones que no estén en una intranet?  ¿Asp.Net Membership? ¿un Custom Membership? ¿o implementais vuestra propia seguridad? si es así ¿cómo controláis la seguridad por roles?

Muchas gracias a todos
Saludos
Manel

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/VplvpoNEaVYJ.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Walter Poch

unread,
Nov 5, 2012, 10:07:02 AM11/5/12
to altnet-...@googlegroups.com
Personalmente cree un un Membership Provider que se adapta a mi modelo.

Pero como te dice Nelo, con hacer un HttpModule y reemplazar el User ya estaría.


Luego ahí lo buscas donde lo hayas guardado, si lo haces a mano acordate de temas de seguridad, no guardar contraseñas planas, funcionalidad de bloquear usuarios cada x intentos, recuperar passwords, etc...
--
Saludos,

Walter G. Poch
Sr. .Net Developer
--------------------------------------------
Cell: +54 (9 341) 3353273
walte...@gmail.com

Edgar Ramos

unread,
Nov 5, 2012, 11:04:48 AM11/5/12
to altnet-...@googlegroups.com
no he tenido tiempo de revisarlo, pero pinta muy bien, ya alguien en el foro lo comento anteriormente 


Saludos


El 5 de noviembre de 2012 10:44, Manel <kale...@gmail.com> escribió:
En la aplicación que tengo que hacer, el usuario forma parte del negocio. Es una aplicación web para convocar reuniones.
Asi que un usuario puede convocar reuniones. Otros usuarios pueden aceptar las convocatorias.

Necesito roles porque no todos los usuarios pueden convocar reuniones, y como el usuario es parte del negocio (las reuniones tienen un convocante y una lista de asistentes) me gustaría poder tenerlo en la base de datos de negocio, no tener una específica de seguridad.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/1RqAsTDV1BMJ.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.



--
Saludos
Edgar

Walter Poch

unread,
Nov 5, 2012, 11:09:13 AM11/5/12
to altnet-...@googlegroups.com
A mi me pasó lo mismo, por eso opté por hacer una implementación propia de los providers. Me gusta "bastante" como me quedó modelado, con ayuda del grupo.


Tengo un objeto Persona (que serían los usuarios) y Roles (Admin, Secretaria, Paciente, Profesional), y luego en Persona un método genérico persona.As<Paciente>(), y ahí me devuelve el Rol Paciente con sus datos asociados (ej: Obra Social, Plan), o persona.Is<Paciente>() y devuelve un boolean si tiene o no rol.

Lo hice de esa forma porque los Roles agregan información, por ejemplo si es Profesional tiene Nro de Matricula, etc.

Saludos,

El 5 de noviembre de 2012 12:44, Manel <kale...@gmail.com> escribió:
En la aplicación que tengo que hacer, el usuario forma parte del negocio. Es una aplicación web para convocar reuniones.
Asi que un usuario puede convocar reuniones. Otros usuarios pueden aceptar las convocatorias.

Necesito roles porque no todos los usuarios pueden convocar reuniones, y como el usuario es parte del negocio (las reuniones tienen un convocante y una lista de asistentes) me gustaría poder tenerlo en la base de datos de negocio, no tener una específica de seguridad.



El lunes, 5 de noviembre de 2012 15:56:32 UTC+1, Nelo escribió:
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/1RqAsTDV1BMJ.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Walter Poch

unread,
Nov 5, 2012, 11:12:17 AM11/5/12
to altnet-...@googlegroups.com
Hace un tiempo Daniel Calvin hizo una librería al respecto te dejo el link al thread: https://groups.google.com/forum/?fromgroups=#!searchin/altnet-hispano/mvc$20roles/altnet-hispano/PPJu5odsptc/5Yr90RskkxcJ

nelopa...@gmail.com

unread,
Nov 5, 2012, 1:55:31 PM11/5/12
to altnet-...@googlegroups.com
Si, mientrás que tu seguridad sea solo por roles, en forma absoluta, va bien el tema del httpmodule y el identity. Con Absoluta me refiero a que un usuario que es CreadorDeRenuiones lo es en todos los contextos... ahora si que sea CreadorDeRenuiones depende de otro dato, por ejemplo, de la sala donde se efectúa la reunión se te va a empezar complicar manejar la seguridad de esta forma.

saludos.
nelo


2012/11/5 Manel <kale...@gmail.com>
¡¡¡Muchas gracias por las ideas e información!!!
Lo que me preocupaba es poder seguir utilizando el iprinicpal y las marcas de roles, pero como comentas, haciendo un httpmodule lo puedo gestionar yo. Revisaré el codigo

y muchas gracias otra vez ;)
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/Gnw50ZlXM3sJ.

Cristian Prieto

unread,
Nov 6, 2012, 2:25:24 AM11/6/12
to altnet-...@googlegroups.com
Creo que esta aseveracion esta llena de malos entendidos...

No me termina de convencer ASP.Net Membership Provider ya que requiere un sql server y un modelo separado del modelo de mi base de datos. Además extender Membership Provider y Role Provider no me parece la mejor solución, mucho trabajo para tan solo querer una tabla de usuarios con Id, contraseña, otra con roles y poco más. 

Nada te restringe de crear tu propio Membership y Role Providers y usar el modelo de datos que quieras, la base de datos que quieras, el origen de datos que deseas y de esa manera mantener todo coherente. Creo que a lo que te refieres es a usar los providers _que vienen con la cajita_ y si, lo acepto, son una porqueria...

De hecho, crear tu propio provider es simple y sencillo, pero la clase abstracta del provider es el mejor ejemplo a mi criterio de como violar el principio de Interface Segregation y la regla de Liskov... Pero es la forma mas rapida de hacer lo que necesitas sin usar una tercera libreria...

Hace ya anios escribi al respecto en mi blog http://cprieto.com/2009/08/tu-propio-roleprovider-en-asp-net/

Saludos

Cristian Prieto


2012/11/6 Manel <kale...@gmail.com>

Carlos Peix

unread,
Nov 6, 2012, 4:58:41 AM11/6/12
to altnet-...@googlegroups.com
Hola Manel,

2012/11/5 Manel <kale...@gmail.com>

En la aplicación que tengo que hacer, el usuario forma parte del negocio. Es una aplicación web para convocar reuniones.
Asi que un usuario puede convocar reuniones. Otros usuarios pueden aceptar las convocatorias.

Cuidado con esto. Sugiero que pienses un poco mas este punto. Lo que te facilita Membership es la gestion de credenciales de una manera ordenada y segura. Este componente no tiene nada que ver (ni deberia) con tu negocio.

Sugiero que definas tu objeto Usuario (o algo mas especifico) en forma independiente de tus credenciales y, del lado de Membership, asocias ese objeto a la credencial (y no al reves). El viejo consejo: el codigo de bajo nivel debe depender del de alto nivel y no al reves.

Pensa, por ejemplo, como harias si tuvieras que agregar GMail o Yahoo! como mecanismo de autenticacion, ademas de Membership. Tu diseño lo soportaria?


Por otro lado, vas a tener que dedicar mucho tiempo a lograr algo equivalente a Membership, mas alla de que requieras de SQLServer, o que construyas tu propio provider como dice Cristian (algo que no es trivial).

Me ha pasado (y veo que pasa) varias veces que digo: no quiero dedicar 8 horas a entender/integrar este componente y luego dedicar 100 horas a construir una alternativa menos completa y mas cara.

En cualquier caso, debieras usar cualquier componente de autenticacion de manera que fuese facilmente reemplazable por otro.

Un saludo

----------------------------------
Carlos Peix

Reply all
Reply to author
Forward
0 new messages