2009-07-25 17 views
10

Se golpeó una barricada mientras se implementaba un sub domain based language switcher (cargas de dominio en.domain.com, jp.domain.com cargas japonesas).ASP.NET MVC: autenticación/membresía de subdominio cruzado

¿Cómo puedo obtener un único sistema de membresía para trabajar en varios subdominios (ASP.NET MVC C#)?

Vimos algo sobre cómo agregar domain="domain.com" a <forms > entrada en web.config. Hizo eso, pero ¿eso funciona cuando se prueba en el servidor web local de desarrollo de estudios visuales?

+0

posible duplicado de [autenticación de formularios de subdominios] (http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk

Respuesta

7

Intente crear la cookie usted mismo.

En AccountController se encuentra esta:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

que "crea y se suma a la colección de cookies". No permite la modificación del dominio (pero permite la modificación de la ruta, de manera extraña). En lugar de crear una galleta sin añadir a la colección, modificar las propiedades necesarias, a continuación, añadir a la colección:

var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie); 
//if you're debugging right here, a.Domain should be en.example.com; change it 
a.Domain = "example.com"; 
HttpContext.Current.Response.Cookies.Add(a); 

James

+0

excelente idea ... Aunque he Ya decidí eliminar el uso de subdominios para la elección del idioma, este es uno para recordar. ¡Gracias! – Chaddeus

+0

Esto no funcionó para mí. Estoy usando EF6 MVC 4 ... ¿tienes algún consejo por favor? – ilans

0

Su problema es cómo los navegadores envían cookies durante la solicitud.

La cookie generalmente está vinculada a un solo dominio, esto es por razones de seguridad y rendimiento. Por ejemplo, el usuario no desea enviar cookies para su dominio a ningún otro dominio, ya que su cookie puede contener información confidencial.

El navegador distingue entre las cookies establecidas en en.domain.com y jp.domain.com. No permiten que las cookies de un dominio vayan al otro porque no están en un dominio principal.

La solución a su problema sería tomar el control de la generación de cookies. No he jugado mucho con ASP.NET MVC, pero estoy seguro de que no se puede hacer a través del HTML sino a través de una propiedad o algo así. Este es un escenario muy común. Debe establecer el dominio de cookies en "domain.com" para sus cajas de producción, eso es correcto. Si está trabajando en un recuadro local, debe establecer el dominio de cookies en "".

3

usted tiene que utilizar el prefijo de puntos, como este.

<authentication mode="Forms"> 
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" /> 
</authentication> 
+1

también, esto solo funciona para dominios de segundo nivel o superior, es decir, '.mydomain' no funciona, pero' .mydomain.com' será –

+0

¿funciona para "localhost"? es decir, para la depuración en VS? ¿También se requiere configurar el dominio en la etiqueta de formulario si está configurando el dominio en la cookie? – Rahatur

Cuestiones relacionadas