Я экспериментирую с FormsAuthentication (использующий ASP.NET MVC2), и он работает довольно хорошо.
Однако один случай, который я не могу разработать, как иметь дело с, проверяет пользовательские идентификационные данные на сервере, чтобы гарантировать, что это все еще допустимо с точки зрения сервера.
например.
Я могу обнаружить этот штраф, но что корректный путь состоит в том, чтобы обработать его? Вызов FormsAuthentication.SignOut
в OnAuthorization
на OnActionExecuting
события являются слишком поздними для влияния на текущий запрос.
Кроме того, я хотел бы смочь к вызовам FormsAuthentication. InvalidateUser (...), когда пользователь удален (или воссозданная база данных) для лишения законной силы всех билетов для данного (или все) пользователи. Но я не могу найти, что API делает это.
В 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
, и все готово. Это также хорошее место, чтобы поменять общий принципал на собственный, если вам нужно.