Лишение законной силы стороны сервера ASP.NET FormsAuthentication

Я экспериментирую с FormsAuthentication (использующий ASP.NET MVC2), и он работает довольно хорошо.

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

например.

  1. Пользователь входит в систему... получает cookie/билет
  2. Из полосы пользователь удален на стороне сервера
  3. Пользователь выполняет новый запрос к серверу. HttpContext. Пользователь. Идентификационные данные. Имя определяется удаленному пользователю.

Я могу обнаружить этот штраф, но что корректный путь состоит в том, чтобы обработать его? Вызов FormsAuthentication.SignOut в OnAuthorization на OnActionExecuting события являются слишком поздними для влияния на текущий запрос.

Кроме того, я хотел бы смочь к вызовам FormsAuthentication. InvalidateUser (...), когда пользователь удален (или воссозданная база данных) для лишения законной силы всех билетов для данного (или все) пользователи. Но я не могу найти, что API делает это.

10
задан Rob Walker 23 May 2010 в 20:32
поделиться

1 ответ

В global.asax добавьте обработчик для AuthenticateRequest . В этом методе проверка подлинности с помощью форм уже выполнена, и вы можете изменить текущего участника до того, как произойдет что-либо еще.

protected void Application_AuthenticateRequest(object sender, EventArgs e) {
  IPrincipal principal = HttpContext.Current.User;
  if (!UserStillValid(principal)) {
    IPrincipal anonymousPrincipal = new GenericPrincipal(new GenericIdentity(String.Empty), null);
    Thread.CurrentPrincipal = anonymousPrincipal;
    HttpContext.Current.User = anonymousPrincipal;
  }     
}

Просто примените метод UserStillValid , и все готово. Это также хорошее место, чтобы поменять общий принципал на собственный, если вам нужно.

7
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: