c# - formsauthentication - authentication mode forms web config
Autenticación de formularios en subdominios (7)
2 cosas por hacer:
- MachineKey debería ser el mismo en todos los web.config (dominio principal y subdominio (s))
- AuthenticationCookie domain name debe ser el mismo.
Siga el following artículo para más profundidad.
¿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.
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
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);
}
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));
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. Here 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).
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
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.
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).