Pregunta

¿Es posible autenticar usuarios en subdominios cuando la autenticación se realiza 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 se produjo en un subdominio?

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

¿Fue útil?

Solución

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

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

Otros consejos

Cuando autentique al usuario, configure 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 a petición, por lo que es posible la autenticación sobre cada una, ya que tendrá una cookie de autenticación compartida con la que 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 funcionó bien +1, el método FormsAuthenication.SignOut () no funcionó cuando se lo llamó desde un subdominio que no sea www /. (Supongo que porque la propiedad .Domain no coincide) - Para solucionar 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 configurar una cookie en el dominio principal, también debe asegurarse de que todos los sitios (aplicaciones) tengan la misma validationKey y decryptionKey () para que todos reconozcan la cookie y el ticket de autenticación de cada uno. Bastante buen artículo aquí http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Sí, claro. Es posible que deba rodar el suyo en algunas etapas, pero debería ser factible.

Una idea: cuando los redirecciona a través del límite, les da un token de paso único y luego le dice al subdominio receptor que los espere (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 código web " dominio " De lo contrario, el cierre de sesión de autenticación de formularios no funcionará correctamente. Aquí es el problema de cierre de sesión que vine a través de. El truco aquí es tener un '.' como prefijo, ya que el dominio se establece para la cookie como " .parent.com " (utilice un inspector de cookies).

<authentication mode="Forms">          
      <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com"  name="FormAuthentication" path="/"/>
    </authentication>

2 cosas por hacer:

  1. MachineKey debe ser igual en todos los web.config (dominio principal y subdominio (s))
  2. El nombre de dominio AuthenticationCookie debe ser el mismo.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top