c# - mvc - Cookie de identidad de ASP.NET en subdominios
login identity asp net (4)
Debe configurar en web.config la misma clave de máquina para TODOS los sitios web / aplicaciones.
Todos los sitios web DEBEN TENER al menos esta configuración.
http://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.85).aspx
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" decryption="Auto"/>
</system.web>
Esto es un ejemplo
Para la autenticación de formularios, utilicé esto en web.config (observe el atributo de dominio):
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>
¿Cómo se configura un inicio de sesión único en los subdominios para el nuevo Framework de identidad de ASP.NET en Mvc 5?
Más información:
Estoy creando una aplicación multiusuario. Cada cliente estará en un subdominio:
client1.myapp.com
client2.myapp.com
Quiero que un usuario pueda iniciar sesión en client1.myapp.com
y luego ir a client2.myapp.com
e client2.myapp.com
. Esto fue fácil con la autenticación de formularios. Estoy tratando de descubrir cómo hacerlo con el nuevo Marco de Identidad.
EDITAR
Aquí está el código que finalmente funcionó para mí:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myapp.com"
});
En Startup.Auth.cs, verá algo como:
para RC:
app.UseSignInCookies();
Esto se eliminó en RTM y se reemplazó con la configuración explícita de la autenticación de cookies:
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
La clase CookieAuthenticationOptions tiene una propiedad CookieDomain que es lo que estás buscando, creo.
En el archivo Startup.Auth.cs, agregue el parámetro CookieDomain
con su dominio:
var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieDomain = ".mydomain.com"
};
Luego, para todos los sitios web, debe establecer una clave de máquina única. La forma más fácil de generar una nueva es usar IIS:
Busque la opción "Clave de la máquina" en su sitio:
Haga clic en el botón "Generar claves" para obtener sus llaves.
Finalmente, el proceso anterior agregará lo siguiente a su web.config
y debe asegurarse de que esto se copie en cada uno de sus sitios.
<machineKey
validationKey="DAD9E2B0F9..."
decryptionKey="ADD1C39C02..."
validation="SHA1"
decryption="AES"
/>
Esto me estaba volviendo loco hasta que supe que Identity 2.0 aún depende de la clave del equipo para cifrar la cookie de autenticación. Por lo tanto, si desea dos instancias de la misma aplicación en diferentes subdominios, debe configurar la misma clave de máquina para cada aplicación.
Entonces en resumen:
- CookieDomain = ".myapp.com"
Establecer teclas de máquina idénticas en la configuración web de cada aplicación
<system.web> <machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" /> </system.web>
Esta respuesta me llevó a establecer los valores: ¿ASP.NET Identity 2 usa machinekey para cifrar la contraseña?