<machineKey decryptionKey = «Автогенерация»… игнорируется IIS. Не сделает недействительными файлы cookie предыдущей сессии
(See question below for more context):
Есть ли ситуации, в которых
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"/>
в web.config не удалось бы автоматически сгенерировать новый machineKey при перезапуске пула приложений? Это поведение, которое я вижу ...
Я использую стандартную ASP.NET FormsAuthentication в приложении MVC. Если я войду в систему с помощью пользователяFormsAuthentication.GetAuthCookie
и не использовать постоянный файл cookie (полагаясь на сеанс браузера для запоминания моего авторизованного состояния), я ожидаю, что переработка пула приложений IIS сделает недействительными знания сеанса об этом файле cookie и, таким образом, выйдет из системы всех пользователей, которые У вас нет постоянных файлов cookie.
Это происходит в одной из моих установок IIS (XP), но в другой конфигурации IIS (Server 2K3) файл cookie FormsAuthentication (под стандартным именем «.ASPXAUTH») остается действительным и продолжает авторизовывать пользователя.
Кто-нибудь знает, почему это происходит или какая конфигурация контролирует это поведение?
Очевидно, что переработка пула приложений не контролирует, отправляет ли браузер cookie-файл .ASPXAUTH или нет (пока я не закрыл свой браузер и срок действия cookie-файла не истек).
In the case of the IIS install that properly denies authentication after a recycle, I can see the incoming cookie in Request.Cookies
during the Application_BeginRequest
event...but once control moves to the next event available in Global.asax.cs (Application_AuthenticateRequest
), the cookie has been removed from the Request.Cookies
collection.
Почему этого не происходит для обеих конфигураций IIS / ASP.NET?
В случае, если это не ясно, более простым способом формирования вопроса является:
ПочемуHttpContext.Current.Request.Cookies[".ASPXAUTH"]
меняться от{System.Web.HttpCookie}
обнулять, когда я перехожу, в одном запросе, изApplication_BeginRequest
вApplication_AuthenticateRequest
?
Больше отладочной информации:
Если я прикреплю следующий код к событию 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)
{
}
}
... тогда во время запросаbefore Я перерабатываю пул приложений IIS, исключений не будет. После перезапуска пула приложений IIS, когда из браузера отправляется точно такой же файл cookie .ASPXAUTH, возникает криптографическое исключение (& quot; заполнение недопустимо и не может быть удалено. & Quot;)
Почему это?