MVC 5 Identity и проверка метки безопасности

Особенности собственной реализации механизма проверки метки безопасности (Security Stamp) в MVC 5 Identity.

В стандартном шаблоне проекта MVC 5, в файле App_Start/Startup.Auth.cs, методе ConfigureAuth есть следующий код:

// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider
    {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(15),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

Особый интерес вызывают строки с 8 по 15. В них настраивается механизм проверки метки безопасности.

Информации по этому вопросу как то маловато, я понимаю этот функционал так…

Метка безопасности (Security Stamp) устанавливается при первом входе пользователя на сайт и сохраняется в системе (в хранилище информации о пользователях, как правило это база данных) и… видимо в Cookie (или в другом хранилище сессионной информации). С интервалом, заданным параметром validateInterval, метка проверяется. Если она изменилась — сессия пользователя завершается и ему необходимо авторизоваться заново.

Так как метка храниться на сервере, то в независимости от того, из какого браузера и с какого компьютера пользователь заходит на сайт, она всегда одна и тажа (до тех пор пока не изменится).

Меняется метка в следующих случаях:

  • пользователь нажал кнопку выхода;
  • пользователь изменил пароль.

В этом случае, во всех браузерах и на всех устройствах пользователя метка не будет совпадать и пользователю придется заново авторизоваться.

С помощью метки безопасности сам сайт или администратор сайта, в случае необходимости, может принудительно «выгнать» пользователя из системы.

Без этого механизма пользователь будет оставаться в системе до тех пор, пока не закончится срок жизни авторизационных Cookie, причем это будет на каждом устройстве отдельно. При изменении пароля пользователь все равно будет оставаться в системе под старыми авторизационными данными.

Механизм метод безопасности реализован в стандартном шаблоне с использованием Entity Framework. Если есть необходимость отказаться от EF и реализовать собственный механизм авторизации, то для работы меток необходимо, чтобы ваш класс, реализующий интерфейс IUserStore реализовывал так же интерфейс IUserSecurityStampStore.

Если вам не нужен механизм меток или вы не реализовали интерфейс IUserSecurityStampStore, разумно будет исключить код, устанавливающий свойство Provider (строки с 8 по 15 в примере выше). Иначе пользователь будет выкидываться из системы даже если он установить флаг Remember Me.

About the author

Добавить комментарий

Сказать спасибо

Способ платежа:

Подписаться на обновления

Укажите свой e-mail чтобы получать уведомления о новых статьях.

Присоединиться к еще 1 подписчику