Autenticación de formularios en subdominios

¿Es posible autenticar usuarios a través de subdominios cuando la autenticación tiene lugar en un subdominio en lugar del dominio principal?

Por ejemplo:

El usuario inicia sesión en site1.parent.com y luego debemos enviarlo a reporting.parent.com.

¿Puedo autenticarlos en el sitio de informes a pesar de que el inicio de sesión ocurrió en un subdominio?

Hasta ahora, toda la investigación que he realizado tiene a los usuarios iniciando sesión en el dominio principal primero y luego cada subdominio tiene acceso a la cookie de autenticación.

Puede configurar la cookie para que sea el dominio principal en el momento de la autenticación, pero tiene que establecerla explícitamente, de manera predeterminada será el dominio completo en el que se encuentre.

Una vez que la cookie de autenticación está configurada correctamente en el dominio principal, todos los subdominios deberían poder leerla.

Cuando autentifique al usuario, establezca el dominio de la cookie de autenticación en el dominio de segundo nivel, es decir, parent.com. Cada subdominio recibirá las cookies del dominio principal cuando lo solicite, de modo que la autenticación sobre cada una es posible, ya que tendrá una cookie de autenticación compartida para trabajar.

Código de autenticación:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False); authcookie.Domain = "parent.com"; HttpResponse.AppendCookie(authcookie); HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, False)); 

Como nota al margen, descubrí que después de usar el método de jro que funcionaba bien +1, el método FormsAuthenication.SignOut () no funcionaba cuando se llamaba desde un subdominio distinto de www /. (Supongo que porque la propiedad .Domain no coincide) – Para evitar esto utilicé:

 if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) { HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); myCookie.Domain = "parent.com"; myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } 

Además de establecer un dominio de cookie a principal también es necesario asegurarse de que todos los sitios (aplicaciones) tengan la misma validationKey y decryptionKey () para que todos reconozcan el cookie y el ticket de autenticación de cada uno. Bastante buen artículo aquí http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Si seguro. Es posible que necesites rodar el tuyo en algunas etapas, pero debería ser factible.

Una idea: cuando los redirija a través del límite, proporciónele un token de pase de una sola vez y luego diga al subdominio receptor que lo espera (este usuario, desde esta IP, con este token).

La respuesta de Jro funciona bien. Pero asegúrese de actualizar la configuración de autenticación de formularios webconfig setting "domain" , de lo contrario, el registro de autenticación de formularios no funcionará correctamente. Aquí está el problema de registro que encontré. El truco aquí es tener un ‘.’ como el prefijo como el dominio se establece para la cookie como “.parent.com” (use un inspector de cookies).

    

2 cosas por hacer:

  1. MachineKey debería ser el mismo en todos los web.config (dominio principal y subdominio (s))
  2. AuthenticationCookie domain name debe ser el mismo.

Siga el siguiente artículo para más profundidad.