(vedere la domanda qui sotto per maggiori contesto):<machineKey decryptionKey = "AutoGenerate" ... viene ignorato da IIS. non invalida i cookie di sessione precedente
Esistono situazioni in cui
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"/>
nel web.config non riuscirebbe a AutoGenerate una nuova machinekey su App Riciclare la piscina? Questo è il comportamento che sto vedendo ...
Sto utilizzando i moduli ASP.NET standardAuthentication in un'app MVC. Se registro un utente utilizzando FormsAuthentication.GetAuthCookie
e non utilizzo un cookie persistente (basandosi sulla sessione del browser per ricordare il mio stato autorizzato), mi aspetterei di riciclare il Pool di applicazioni IIS per invalidare la conoscenza della sessione di questo cookie ... e quindi disconnetti tutti gli utenti che non hanno cookies persistenti.
Questo si verifica in una delle mie installazioni IIS (XP), ma su una configurazione IIS diversa (Server 2K3) il cookie FormsAuthentication (con il nome standard ".ASPXAUTH") rimane valido e continua ad autorizzare l'utente.
Qualcuno sa perché questo sta accadendo o quale configurazione controlla questo comportamento?
Ovviamente il riciclo del pool di applicazioni non ha alcun controllo sul fatto che il browser invii o meno il cookie .ASPXAUTH (a condizione che non abbia chiuso il browser e che il cookie non sia scaduto).
Nel caso di IIS installazione che nega correttamente l'autenticazione dopo un riciclo, posso vedere il cookie in entrata nel Request.Cookies
durante l'evento Application_BeginRequest
... ma una volta che il controllo si sposta al prossimo evento disponibili in Global.asax.cs (Application_AuthenticateRequest
), il cookie è stato rimosso dalla raccolta Request.Cookies
.
Perché ciò non accade per entrambe le configurazioni IIS/ASP.NET?
Nel caso in cui questo non è chiaro, un modo più semplice di formare la domanda è:
Perché HttpContext.Current.Request.Cookies[".ASPXAUTH"]
cambiamento da {System.Web.HttpCookie}
a nulla quando faccio un passo, in una singola richiesta, Application_BeginRequest
-Application_AuthenticateRequest
?
Maggiori informazioni di debug:
Se allego il seguente codice all'evento FormsAuthentication_OnAuthenticate di Global.asax.cs ...
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var val = cookie.Value;
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
}
catch (Exception)
{
}
}
... poi durante una richiesta prima I riciclare il pool di applicazioni IIS, non verrà rilevata alcuna eccezione. Dopo aver riciclato il pool di applicazioni IIS, quando lo stesso esatto cookie .ASPXAUTH viene inviato dal browser, viene rilevata un'eccezione crittografica ("Il riempimento non è valido e non può essere rimosso.")
Perché è questo?
È configurato per utilizzare l'ASP.Servizio di stato della rete per archiviare la sessione anziché inproc? – devstuff
Buon pensiero - no, stanno entrambi usando InProc, sfortunatamente. – kamens