Vedi aggiornamento in basso della domandaUn'applicazione ASP.NET 4.0 in un sito ASP.NET 2.0 può utilizzare lo stesso cookie di Autenticazione moduli?
Ho un'applicazione web 2.0 ASP.NET (diciamo https://mysite.somedomain.com/
), che utilizza l'autenticazione moduli. Desidero integrare un'app Web ASP.NET 4.0 all'interno di questo sito, basata su https://mysite.somedomain.com/NewApp/
. Forms Auth sta lavorando sull'app esterna, ma l'app interna sta rifiutando il cookie.
web.config
sul esterno (ASP.NET 2.0) web app 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
su quello interno (ASP.NET 4.0) web app 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"/>
Questo è il codice in Login.aspx.cs che imposta il cookie di autenticazione di successo:
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);
Se accedo all'applicazione Web esterna, accedi a una pagina all'interno dell'app Web interna, esegue un reindirizzamento alla pagina di accesso e scrive Forms authentication failed for the request. Reason: The ticket supplied was invalid.
nel registro eventi sul server.
Come si ottiene il ticket di autenticazione moduli ASP.NET 2.0 da accettare dall'app Web interna di ASP.NET 4.0?
Aggiornamento: Funziona in HTTPS IIS 7.5, ma non in HTTPS IIS 7.0. Facendo qualche altra indagine.
Aggiornamento 2: Abbiamo applicato Server 2008 SP2 al server insieme alla patch recente per il DoS hash-collisione e da allora ha funzionato la condivisione dei cookie.
forse vale la pena di mettere la stessa decrittografia e convalida i valori degli attributi (http://msdn.microsoft.com/en-us/library/w8h3skw9(v=VS. 100) .aspx) nonché i tasti per essere sicuri. Questo è stato un problema tra asp.net 1.1 e 2 – davidsleeps
Ho appena provato questo (e la domanda aggiornata), lo stesso risultato. – geofftnz