Можно ли установить билет аутентификации вручную при использовании элемента управления входом ASP.NET?

Я использую элемент управления входом в систему ASP.NET. Я хочу иметь возможность устанавливать время ожидания для проверки подлинности с помощью форм индивидуально для каждого пользователя (а не глобально в файле web.config). Насколько я понимаю, единственный способ сделать это - установить тайм-аут в AuthenticationTicket вручную. Есть ли способ сделать это при использовании элемента управления входом? Мне кажется, что Login Control абстрагируется от всего этого. Я надеюсь, что есть какой-то способ продолжить использование элемента управления входом, но также есть возможность установить время ожидания FormsAuthentication индивидуально для каждого пользователя.

Спасибо, Кори


person Corey Burnett    schedule 11.03.2011    source источник


Ответы (2)


MSDN говорит:

Событие LoggedIn возникает после того, как поставщик проверки подлинности проверяет учетные данные пользователя, и файл cookie проверки подлинности помещается в очередь для отправки в браузер в следующем ответе. Используйте событие LoggedIn, чтобы обеспечить дополнительную обработку, например доступ к данным пользователя, после аутентификации пользователя.

Таким образом, это событие кажется подходящим местом для замены файлов cookie. Во-первых, файл cookie необходимо получить и расшифровать:

HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket = 
    FormsAuthentication.Decrypt(authCookie.Value);

сразу после этого должен быть создан новый билет аутентификации на основе только что извлеченного:

FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
    oldAuthTicket.Version,
    oldAuthTicket.Name,
    DateTime.Now,
    DateTime.Now.Add(timeoutForUser),
    oldAuthTicket.IsPersistent,
    oldAuthTicket.UserData,
    FormsAuthentication.FormsCookiePath
);

timeoutForUser здесь значение TimeSpan, которое содержит время ожидания сеанса для пользователя.

И, наконец, старый cookie в ответе нужно заменить на новый:

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie = 
    new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);

Это должно сработать.

person Alex    schedule 11.03.2011

Элемент управления входом имеет события LoggingIn и LoggedIn, которые вы можете использовать для самостоятельной обработки аутентификации.

Вы можете отменить процесс входа в событие LoggingIn, установив e.Cancel = True, а затем вручную создать тикет, используя новый new FormsAuthenticationTicket(...).

person Geoff Appleford    schedule 11.03.2011