Cookie de subdominio ASP.NET (principal y un subdominio)

Tengo una aplicación con múltiples subdominios, subone.parent.com, subtwo.parent.com.

Tengo una página de inicio de sesión en parent.com/login. Cuando un usuario inicia sesión, los redirijo al dominio adecuado según el miembro del que sean miembros. Esto funciona bien

FormsAuthenticationTicket ticket = new FormsAuth... string encTicket = FormsAuthentication.Encrypt(ticket); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); cookie.Domain = subone.parent.com Response.Cookies.Add(cookie) 

Esto autentica correctamente al usuario para subone.parent.com y no subtwo.parent.com. Sin embargo, me gustaría hacer lo siguiente.

Si el usuario vuelve a parent.com, me gustaría saber que están conectados y redirigirlos a subone.parent.com.

¿Hay una mejor práctica para lograr esto? ¿O tengo que configurar otra cookie para parent.com?

Estoy trabajando en asp.net mvc si es importante.

¡Gracias!

Puede compartir cookies entre dominios como lo está intentando hacer, pero no es sencillo, ejemplifique aquí .

Otra opción es establecer que la cookie sea “.parent.com” en lugar de especificar explícitamente el subdominio y usar la cookie store para los detalles del subdominio. Luego puede acceder a la cookie desde cualquiera de sus subdominios (y el padre suponiendo que es http://www.parent.com).

Si usa MVC, puede crear fácilmente un filtro personalizado y agregarlo a los controladores de http://www.parent.com para verificar la existencia de la cookie y, de ser así, redireccionar al subdominio que la cookie especifica. Más detalles de los filtros aquí .

Establecería la cookie para el dominio explícito, ya que tiene allí porque mantiene la información de seguridad dentro de la cookie de ese dominio específico. También puede agregar una cookie no cifrada en el nivel * .parent.com que contiene información sobre los dominios que se han autenticado. No existe una manera real de unir esto sin usar timestamps y tener una conexión lógica entre las aplicaciones (es decir, sub2 tiene un tiempo de espera de sesión de 20 minutos, por lo que si el dominio + sello de tiempo válido aparece en la cookie principal, sería válido, sin embargo, esto es lógica de negocios).

No estoy seguro del razonamiento detrás de la desconexión entre dominios, pero en realidad podría preferir tener una única cookie que tenga texto encriptado detrás del texto encriptado. P.EJ:

1) Sub1 inicia sesión, establece la cookie de parent.com como válida. Envía una parte de los datos del usuario a un servicio web de autenticación.

2) El servicio de autenticación reconoce sub1 como el remitente, encripta los datos del usuario y los agrega a un objeto de cookie personalizado.

3) El objeto cookie personalizado construye una cadena compuesta en un carácter dividido único (o secuencia) y lo pone a disposición del método de servicio.

4) El servicio, utilizando el cifrado de formularios, cifra el ticket completo y lo envía de vuelta al inicio de sesión original.

De esta forma, cada servidor podría descifrar el ticket global, pero cada dato se cifraría usando un algoritmo común pero una sal basada en el servidor. Entonces, si sub2 intenta leer los datos de la cookie desde sub1, obtiene la versión encriptada en lugar de los datos sin procesar.

puedes compartir la misma sesión en todos los subdominios. Ese es el código que usamos para lograr eso 🙂

 void MasterPage_Unload(object sender, EventArgs e) { ///ASP.NET uses one cookie per subdomain/domain, ///we need one cookie for _all_ subdomains. if (Context.Response.Cookies["ASP.NET_SessionId"] == null) return; var sessionCookie = new HttpCookie("ASP.NET_SessionId", Context.Session.SessionID); sessionCookie.Domain = ".yourdomain.com" ; Context.Response.SetCookie(sessionCookie); } 

dentro del método Page_Load es:

  Unload += MasterPage_Unload; 

funciona genial 🙂

Robert