Principales respuestas
¿ Se puede compartir Session entre Aplicaciones ?

Pregunta
-
Buenas compañeros, en esta ocasión el caso es el siguiente
Tengo distintas sitios en el mismo servidor IIS, el caso es que estas aplicaciones usan todas una misma base de datos por lo que logarse en cualquier aplicacion deberia asumir que estas logado en cualquier otra cuando esta quieras abrirla.
Actualmente una de la aplicaciones hace Login y te muestra enlaces al resto de aplicaciones, estos enlaces se abren en una nueva pestaña ( no en una ventana nueva sino pestaña ).
El caso es que en la aplicacion llamemos AppPrin te logas con usuario y password, esta aplicacion establece una variable de session Session["Logado"] = "Correcto", cuando pinchas en una aplicacion de la lista y esta se abre en una nueva ventana lo primero que mira es si esa variable Session["Logado"] == "Correcto", el caso es que por algun motivo esa variable es siempre null, es decir ha perdido su valor al abrir la nueva app desde el enlace.
El enlace lanza el siguiente codigo, por si sirve de algo las aplicaciones aunque estan en el mismo server cada uno escucha en un puerto es decir que las urls son del tipo www.miservidor.es:puerto/principal.aspx ( donde lo unico que cambia es el puerto )
public void OpenNewWindow(string url, string ventana) { ScriptManager.RegisterClientScriptBlock(this, GetType(), ventana, "customOpen('" + url + "');", true); }
Espero haberme explicado correctamente.
¿ Igual no debo utilizar Session[""] o hay que configurarla de algun modo ?
¿ Que usuarias en vez de Session[""] ?
Gracias por su ayuda
Respuestas
-
Buenas Leandro,
Tu respuesta me parece muy buena cuando quieres conocer dentro de una única aplicación si estas logado, pero como digo tengo 6 o 7 aplicaciones web distintas, todas ellas comparten base de datos de usuarios y entre ellas hay enlaces, lo que se pretende es que una vez logado en cualquiera de ellas, puedas acceder a las demás sin necesidad de volver a logarte sino que sirva el mismo que ya has hecho.
¿ Como puede ayudarme el que una aplicación asp.net controle la seguridad si tengo que pasarla al resto de aplicaciones ?
Quizas no me explique bien pero la pregunta es ¿ Como paso el usuario y password de una a otra sin que lo tenga que hacer el usuario ?
Igual si implemento en todas las aplicaciones ese tipo de seguridad, entre una y otra tendré que enviarle esos datos sin pedirselos de nuevo al usuario ¿ Como ? ademas queria evitar que en la url de la peticion fueran esos datos, deben de ir ocultos para que no se vean, por eso pense que la session me seria util
En cualquier caso tu respuesta me es muy util pues intentare ir implementando la seguridad como explicas.
Gracias
- Marcado como respuesta Tonatiuh AbregoModerator lunes, 9 de abril de 2018 18:49
Todas las respuestas
-
El objeto Session como tal no puede ser compartido. Lo que necesita hacer es que los URL's de los sitios web pertenezcan todos a un mismo dominio. Una vez hecho esto puede escribir un cookie de autenticación que podrá verse en todos los sitios web. Esto es lo que normalmente se hace.
Para que todos tengan el mismo URL, lo que debe hacer es publicar todos los sitios web "satelitales" como una subcarpeta del sitio web principal. Cada subcarpeta se configura como aplicación aparte y listo.
Jose R. MCP
Code Samples -
hola
>>esta aplicacion establece una variable de session Session["Logado"] = "Correcto",
horrible, pesima seguridad
no puede usar NUNCA la session como medio de seguridad
tienes que usar la seguridad de asp.net
Login – Usando Password con Hash
entonces defines en el web.config
<authentication mode="Forms"> <forms name="appNameAuth" path="/" loginUrl="frmLogin.aspx" defaultUrl="Default.aspx" protection="All" /> </authentication> <authorization> <deny users="?" /> </authorization>
para autenticarte usando
if (LoginService.Autenticar(txtUser.Text, txtPassword.Text)) { FormsAuthentication.RedirectFromLoginPage(txtUser.Text, chkPersistLogin.Checked); }
la idea es que uses
Thread.CurrentPrincipal.Identity
para conocer si estas autenticado o no, pero NO la session
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Tonatiuh AbregoModerator martes, 3 de abril de 2018 15:30
-
Buenas Leandro,
Tu respuesta me parece muy buena cuando quieres conocer dentro de una única aplicación si estas logado, pero como digo tengo 6 o 7 aplicaciones web distintas, todas ellas comparten base de datos de usuarios y entre ellas hay enlaces, lo que se pretende es que una vez logado en cualquiera de ellas, puedas acceder a las demás sin necesidad de volver a logarte sino que sirva el mismo que ya has hecho.
¿ Como puede ayudarme el que una aplicación asp.net controle la seguridad si tengo que pasarla al resto de aplicaciones ?
Quizas no me explique bien pero la pregunta es ¿ Como paso el usuario y password de una a otra sin que lo tenga que hacer el usuario ?
Igual si implemento en todas las aplicaciones ese tipo de seguridad, entre una y otra tendré que enviarle esos datos sin pedirselos de nuevo al usuario ¿ Como ? ademas queria evitar que en la url de la peticion fueran esos datos, deben de ir ocultos para que no se vean, por eso pense que la session me seria util
En cualquier caso tu respuesta me es muy util pues intentare ir implementando la seguridad como explicas.
Gracias
- Marcado como respuesta Tonatiuh AbregoModerator lunes, 9 de abril de 2018 18:49