asp.net mvc - Problemas con la autenticación de subdominios cruzados con WebForms 3.5 y MVC 4.0
asp.net-mvc cookies (2)
Un comentario adicional:
¿Podrían estos parámetros web.config tener algún conflicto con el problema actual:
<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
<add key="aspnet:UseLegacyEncryption" value="true" />
<add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
O ... ¿podrían ayudar a resolver el problema?
¡Gracias!..
PnP
Tengo dos aplicaciones web que implementan un proveedor de membresía asp.net. Es un proveedor de membresía ligeramente modificado (por lo tanto, es un proveedor de membresía personalizado), pero creo que eso es irrelevante para esta publicación.
La aplicación se ejecuta en el mismo dominio y quiero tener una autenticación cruzada entre ellos mediante cookies. (Se ejecutan en app1.midominio.com / app2.midominio.com)
Estoy usando dos aplicaciones implementando el mismo proveedor:
- WebForms 3.5
- MVC 4.5
En ambas aplicaciones tengo las mismas secciones configuradas en el webconfig: autenticación, formularios, machineKey, membresía, roleManager. Ambos usan una Membresía y un proveedor de roles personalizados, que es lo mismo para ambas aplicaciones. Todos residen dentro del mismo dominio. La autenticación en cada aplicación funciona bien.
Problema:
- En la aplicación 4.5, si inicias sesión, y luego vas a la aplicación 3.5 y no inicias sesión
- Si inicia sesión en la aplicación 3.5, no ha iniciado sesión en la aplicación 4.5
- Si inicia sesión en la aplicación 4.0, se desconecta de la aplicación 3.5 incluso si ya se había conectado antes, y lo mismo en la otra dirección
Pruebas que hice:
- Configuré un sitio MVC 4.0 / 4.5 predeterminado y un sitio predeterminado de Web Forms 4.0 / 4.5, y las cookies entre dominios funcionan perfectamente.
- Pero cuando se configura un sitio MVC 4.0 / 4.5 predeterminado y un sitio predeterminado de Web Forms 3.5, el SSO no funciona.
Parece ser una incompatibilidad del marco, o algo ha cambiado entre los marcos cuando se trata de crear o encriptar la cookie, parece que el navegador no envía la cookie creada por un sitio al otro. Por otro lado, funciona muy bien para MVC y WebForms con 4.0 / 4.5.
Estas son las secciones web.config de cada una de las aplicaciones:
MVC 4:
<authentication mode="Forms">
<forms name="isep" loginUrl="~/Account/LogIn" timeout="20" protection="All" />
</authentication>
<machineKey compatibilityMode="Framework20SP2" validationKey="85A2E75F1FFEEAC971928062F844F0AFAE876B422503FCF7F80C1B84683C323049ACCC02A47D54E2E98B0422D2E3EFF1B16B7E85E8359EF6ABC52974D0EB9AA7" decryptionKey="FCD4A55D93A720914FA40EEC9599BD81BECE1490EB232DB8DD649BBB0D565194" validation="SHA1" decryption="Auto" />
WebForms 3.5:
<authentication mode="Forms">
<forms name="isep" loginUrl="login2.aspx" timeout="20" protection="All" />
</authentication>
<machineKey validationKey="85A2E75F1FFEEAC971928062F844F0AFAE876B422503FCF7F80C1B84683C323049ACCC02A47D54E2E98B0422D2E3EFF1B16B7E85E8359EF6ABC52974D0EB9AA7" decryptionKey="FCD4A55D93A720914FA40EEC9599BD81BECE1490EB232DB8DD649BBB0D565194" validation="SHA1" decryption="Auto" />
<authorization>
<deny users="?"/>
</authorization>
¿Alguna pista sobre esto?
¡Gracias!..
PnP
Intente configurar el CompatabilityMode
del elemento MachineKey
en web.config, como se detalla en la siguiente respuesta:
La actualización a autenticación de formularios ASP.NET 4.5 / MVC 4 falla
Después de la actualización
Establezca el atributo de domain
del elemento authentication/forms
en lo siguiente:
<authentication mode="Forms">
<forms domain=".somedomain.com" name="isep" loginUrl="~/Account/LogIn" timeout="20" protection="All" />
</authentication>
Donde somedomain
es su dominio principal.