Ver actualización en la parte inferior de la pregunta¿Puede una aplicación ASP.NET 4.0 en un sitio ASP.NET 2.0 usar la misma cookie de autenticación de formularios?
Tengo una aplicación web ASP.NET 2.0 (por ejemplo https://mysite.somedomain.com/
), que utiliza la autenticación de formularios. Deseo integrar una aplicación web ASP.NET 4.0 dentro de este sitio, con base en https://mysite.somedomain.com/NewApp/
. Forms Auth está trabajando en la aplicación externa, pero la aplicación interna está rechazando la cookie.
web.config
en la (ASP.NET 2.0) aplicación web externa contiene:
<httpCookies requireSSL="true"/>
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
<authorization>
<deny users="?"/>
<allow users="*" />
</authorization>
web.config
en el interior (ASP.NET 4.0) aplicación web contiene:
<authentication mode="Forms">
<forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All"
path="/" timeout="90" requireSSL="true" slidingExpiration="true"
ticketCompatibilityMode="Framework20"/>
</authentication>
<machineKey (same machine key is in both configs)
validation="SHA1"
decryption="AES"/>
Este es el código de en Login.aspx.cs que establece la cookie en la autenticación correcta:
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(
1,
ApplicationContext.User.Identity.Name,
DateTime.Now,
DateTime.Now.AddMinutes(90),
false,
ApplicationContext.User.Identity.SessionID.ToString()
);
HttpCookie cookie =
new HttpCookie(
FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(ticket)
);
cookie.Path = FormsAuthentication.FormsCookiePath;
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
Si inicio sesión en la aplicación web externa, navego a una página dentro de la aplicación web interna, redirige a la página de inicio de sesión y escribe Forms authentication failed for the request. Reason: The ticket supplied was invalid.
en el registro de eventos en el servidor.
¿Cómo consigo que el ticket ASP.NET 2.0 Forms Auth sea aceptado por la aplicación web interna ASP.NET 4.0?
Actualización: funciona bajo HTTPS IIS 7.5, pero no bajo HTTPS IIS 7.0. Haciendo un poco más de investigación.
Actualización 2: Hemos aplicado Server 2008 SP2 al servidor junto con el parche reciente para el hash colisión DoS y desde entonces el intercambio de cookies ha funcionado.
podría valer la pena poner la misma descifrado y validación valores de atributos (http://msdn.microsoft.com/en-us/library/w8h3skw9(v=VS. 100) .aspx) así como también las claves para estar seguro. Este fue un problema entre asp.net 1.1 y 2 – davidsleeps
Acabo de probar eso (y la pregunta actualizada), el mismo resultado. – geofftnz