net mvc implementar framework asp c# authentication forms-authentication asp.net-identity

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:

  1. CookieDomain = ".myapp.com"
  2. 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?