Аннулирование стороны сервера ASP.NET FormsAuthentication - PullRequest
9 голосов
/ 24 мая 2010

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

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

например.

  1. Пользователь входит в систему ... получает cookie / тикет
  2. Вне диапазона пользователь удаляется на стороне сервера
  3. Пользователь делает новый запрос к серверу.HttpContext.User.Identity.Name установлен для удаленного пользователя.

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

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

1 Ответ

7 голосов
/ 24 мая 2010

В 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 и все готово. Это также хорошее место для замены общего принципала на собственный, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...