usehttpsredirection page net aspnet asp app asp.net authentication cookies

asp.net - page - ssl aspnet core



Compartir las cookies de ASP.NET en subdominios (4)

Tengo dos sitios, ambos en el mismo dominio, pero con diferentes subdominios.
site1.mydomain.com site2.mydomain.com

Una vez que estoy autenticado en cada uno, miro las cookies incluidas en la solicitud posterior y son idénticas para cada sitio.

Sin embargo, si inicio sesión en el primer sitio y luego navego hacia el otro, espero que mi cookie del sitio 1 se envíe con la solicitud al sitio2, pero este no es el caso. Aquí están las propiedades de mis cookies.

Iniciando sesión en Site1, esta cookie existe

Name = MySite Domain = Has Keys = False HttpOnly = False Path = / Value = 1C41854066B03D8CC5679EA92DE1EF427DAC65D1BA0E672899E27C57245C1F0B7E93AB01B5563363AB4815A8F4BDE9D293FD261E03F8E60B8497ABBA964D8D315CCE1C8DD220C7176E21DC361935CF6 Expires = 1/1/0001 12:00:00 AM

Al iniciar sesión en Site2, estas cookies existen.

Name = MySite Domain = Has Keys = False HttpOnly = False Path = / Value = C8C69F87F993166C4D044D33F21ED96463D5E4EB41E1D986BF508DA0CBD5C2CA7D782F59F3BC96871108997E899FF7401C0D8615705BDB353B56C7E164D2302EE6731F41705016105AD99F4E0578ECD2 Expires = 1/1/0001 12:00:00 AM

Establecí el dominio en cada uno (no aparece en una cookie de solicitud ya que solo es necesaria en el cliente). Me he asegurado de que mi configuración de Formularios para cada uno sea idéntica. Me he asegurado de que la configuración de las teclas de mi máquina sea la misma en ambas configuraciones web.

No entiendo por qué esto no funciona. ¿Qué contiene una cookie que el cliente le envíe para un subdominio y no para el otro cuando ambos usan las mismas cookies de autenticación hasta donde yo sé?

Comente si hay más información que le gustaría ver. He estado luchando con esto durante dos días. Según este artículo, esto debería estar funcionando.

ACTUALIZACIÓN: código agregado

Aquí está mi configuración de archivo de configuración para mi autenticación. Esto se usa en ambos sitios.

<authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" defaultUrl="~/Home/Index" name="MySite" protection="All" path="/" domain="mydomain.com" enableCrossAppRedirects="true" timeout="2880" />

Y aquí está mi código para crear la cookie en Site1.

//Add a cookie that the Site2 will use for Authentication var cookie = FormsAuthentication.GetAuthCookie(userName, true); cookie.Name = "MySite"; cookie.HttpOnly = false; cookie.Expires = DateTime.Now.AddHours(24); cookie.Domain = "mydomain.com"; HttpContext.Response.Cookies.Add(cookie); HttpContext.Response.Redirect(site2Url,true);

ACTUALIZACIÓN 2:

Noté algo extraño mientras probaba. Cuando agrego una cookie a la respuesta para site1, se agrega a este directorio ... C: / Users / jreddy / AppData / Roaming / Microsoft / Windows / Cookies

Cuando agrego una cookie a la respuesta para el sitio, se agrega a este directorio ... C: / Users / jreddy / AppData / Roaming / Microsoft / Windows / Cookies / Low

Ese podría ser mi problema. ¿Podría ser que uno de mis sitios esté incluido en la zona de intranet local?

ACTUALIZACIÓN 3: Problema encontrado, solución desconocida Parece que mi problema tiene que ver con que mi segundo sitio sea parte de la Zona de Intranet Local. Si voy al Sitio 1 usando Firefox, funciona, pero debo ingresar mis credenciales de Windows. Si voy a través de IE, mis credenciales se recogen automáticamente, pero el sitio2 no puede leer las cookies. Puedo preguntar esto en otra pregunta.


Agrega una nueva cookie y especifica un dominio como este

HttpCookie cookie = new HttpCookie("cookiename", "value"); cookie.Domain = "domain.com";

Para autenticación de formularios, establezca esto en web.config

<forms name=".ASPXAUTH" loginUrl="login.aspx" protection="All" timeout="30" path="/" requireSSL="false" domain="domain.com"> </forms>

La cookie estará accesible para todos los subdominios.

Para que cada dominio pueda descifrar la cookie, todos los archivos web.config deben usar el mismo algoritmo y clave de cifrado / descifrado. ( cómo crear una clave de máquina )

Ejemplo:

// do not wrap these values like this in the web.config // only wrapping for code visibility on SO <machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75 D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281 B" decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719 F" validation="SHA1" decryption="AES" />

Para implementaciones más sencillas, estos valores se pueden almacenar en un archivo separado:

<machineKey configSource="machinekey.config"/>

Para mayor seguridad, también puede encriptar la clave de la máquina para mayor protección. .


Creé un método de extensión HttpContext que escribirá una cookie segura de subdominio.

Publicación de blog y discusión

public static class HttpContextBaseExtenstions { public static void SetSubdomainSafeCookie(this HttpContextBase context, string name, string value) { var domain = String.Empty; if (context.Request.IsLocal) { var domainSegments = context.Request.Url.Host.Split(''.''); domain = "." + String.Join(".", domainSegments.Skip(1)); } else { domain = context.Request.Url.Host; } var cookie = new HttpCookie(name, value) { Domain = domain }; context.Response.SetCookie(cookie); } } // usage public class MyController : Controller { public ActionResult Index() { this.Context.SetSubdomainSafeCookie("id", Guid.NewGuid().ToString()); return View(); } }


Si está utilizando la autenticación Forms en todos sus subdominios, todo lo que necesita hacer es agregar la propiedad domain=".mydomain.com" al nodo <forms> en su web.config

Tenga en cuenta el período .mydomain.com en .mydomain.com

Este simple cambio por sí mismo hará que su cookie de autenticación sea válida en todos los subdominios; no es necesario configurar manualmente ninguna cookie.


establecer la propiedad del dominio en ".midominio.com" en cada uno de los sitios web de las cookies de dos subdominios

me gusta

Response.Cookies["test"].Value = "some value"; Response.Cookies["test"].Domain = ".mysite.com";

ACTUALIZACIÓN 1

en el sitio

HttpCookie hc = new HttpCookie("strName", "value"); hc.Domain = ".mydomain.com"; // must start with "." hc.Expires = DateTime.Now.AddMonths(3); HttpContext.Current.Response.Cookies.Add(hc);

En el sitio B

HttpContext.Current.Request.Cookies["strName"].Value

Intentalo

Saludos