<machineKey decryptionKey = „AutoGenerate”… jest ignorowane przez IIS. Nie unieważni plików cookie poprzedniej sesji

(Zobacz pytanie poniżej, aby uzyskać więcej kontekstu):

Czy są jakieś sytuacje, w których

<machineKey
      validationKey="AutoGenerate,IsolateApps"
      decryptionKey="AutoGenerate,IsolateApps"/>

w web.config nie udałoby się automatycznie wygenerować nowego klucza MachineKey w recyklingu aplikacji Pool? To jest zachowanie, które widzę ...

Używam standardowego uwierzytelniania ASP.NET FormsAuthentication w aplikacji MVC. Jeśli zaloguję użytkownika przy użyciuFormsAuthentication.GetAuthCookie i nie używaj trwałego pliku cookie (polegając na sesji przeglądarki w celu zapamiętania mojego autoryzowanego stanu), oczekiwałbym, że recykling puli aplikacji IIS unieważni wiedzę sesji o tym pliku cookie ... i wyloguje wszystkich użytkowników, którzy nie mają trwałe pliki cookie.

Dzieje się tak w jednej z moich instalacji IIS (XP), ale w innej konfiguracji IIS (serwer 2K3) plik cookie FormsAuthentication (pod standardową nazwą „.ASPXAUTH”) pozostaje ważny i nadal autoryzuje użytkownika.

Czy ktoś wie, dlaczego tak się dzieje lub jaka konfiguracja kontroluje to zachowanie?

Oczywiście recykling puli aplikacji nie ma wpływu na to, czy przeglądarka nadal wysyła plik cookie .ASPXAUTH (o ile nie zamknąłem przeglądarki, a plik cookie nie wygasł).

W przypadku instalacji IIS, która poprawnie odmawia uwierzytelnienia po przetworzeniu, widzę przychodzące ciasteczkoRequest.Cookies podczasApplication_BeginRequest event ... ale gdy kontrola przejdzie do następnego zdarzenia dostępnego w Global.asax.cs(Application_AuthenticateRequest), plik cookie został usunięty zRequest.Cookies kolekcja.

Dlaczego tak się nie dzieje w przypadku obu konfiguracji IIS / ASP.NET?

W przypadku, gdy nie jest to jasne, prostszym sposobem utworzenia pytania jest:

DlaczegoHttpContext.Current.Request.Cookies[".ASPXAUTH"] zmienić z{System.Web.HttpCookie} do null, gdy wykonam, w jednym żądaniu, odApplication_BeginRequest doApplication_AuthenticateRequest?

Więcej informacji o debugowaniu:

Jeśli załączę następujący kod do zdarzenia FormsAuthentication_OnAuthenticate Global.asax.cs ...

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
    var val = cookie.Value;
    try
    {
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
    }
    catch (Exception)
    {
    }
}

... wtedy podczas żądaniaprzed Przetwarzam pulę aplikacji IIS, żaden wyjątek nie zostanie złapany. Po przetworzeniu puli aplikacji IIS, gdy z przeglądarki zostanie wysłany dokładnie ten sam plik cookie .ASPXAUTH, zostanie wykryty wyjątek kryptograficzny („Wypełnienie jest nieprawidłowe i nie można go usunąć”).

Dlaczego to?

questionAnswers(2)

yourAnswerToTheQuestion