Что такое интерфейс IUserSecurityStampStore<TUser> в ASP.NET Identity?

Глядя на ASP.NET Identity (новая реализация членства в ASP.NET), я столкнулся с этим интерфейсом при реализации своего собственного UserStore:

//Microsoft.AspNet.Identity.Core.dll

namespace Microsoft.AspNet.Identity
{ 
    public interface IUserSecurityStampStore<TUser> :
    {
        // Methods
        Task<string> GetSecurityStampAsync(TUser user);
        Task SetSecurityStampAsync(TUser user, string stamp);
    }
}

IUserSecurityStampStore реализован по умолчанию EntityFramework.UserStore<TUser> которые по сути получают и устанавливают TUser.SecurityStamp имущество.

После еще нескольких копаний кажется, что SecurityStamp это Guid который вновь генерируется в ключевых точках UserManager (например, смена паролей).

Я не могу многое расшифровать за пределами этого, так как я исследую этот код в Reflector. Почти вся символьная и асинхронная информация была оптимизирована.

Кроме того, Google не сильно помог.

Вопросы:

  • Что такое SecurityStamp в ASP.NET Identity и для чего он используется?
  • Ли SecurityStamp играть какую-либо роль при создании куки аутентификации?
  • Есть ли какие-либо последствия для безопасности или меры предосторожности, которые необходимо принять с этим? Например, не отправлять это значение клиентам?

Обновление (16.09.2014)

Исходный код доступен здесь:

3 ответа

Решение

Это предназначено для представления текущего снимка учетных данных вашего пользователя. Так что если ничего не изменится, штамп останется прежним. Но если пароль пользователя будет изменен или логин будет удален (отмените связь с учетной записью Google/ FB), штамп изменится. Это необходимо для таких вещей, как автоматическая подпись пользователей / отклонение старых файлов cookie, когда это происходит, - функция, которая появится в 2.0.

Идентификационные данные еще не открыты, в настоящее время они находятся в стадии разработки.

Изменить: Обновлено для 2.0.0. Таким образом, основная цель SecurityStamp это включить выход везде. Основная идея заключается в том, что всякий раз, когда что-то, связанное с безопасностью, изменяется у пользователя, например, пароль, рекомендуется автоматически аннулировать любой существующий вход в файлы cookie, поэтому, если ваш пароль / учетная запись ранее была взломана, злоумышленник больше не имеет доступа.

В 2.0.0 мы добавили следующую конфигурацию для подключения OnValidateIdentity метод в CookieMiddleware смотреть на SecurityStamp и отклонить куки, когда они изменились. Он также автоматически обновляет заявки пользователя из базы данных каждый раз refreshInterval если штамп не изменился (который заботится о таких вещах, как смена ролей и т. д.)

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(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

Если ваше приложение хочет явно запустить это поведение, оно может вызвать:

UserManager.UpdateSecurityStampAsync(userId);

UseCookieAuthentication уже устарела. Мне удалось настроить его с помощью

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));

Перемещено из ответа в ответ на запрос.

Я заметил, что SecurityStamp требуется для проверки токена.

Чтобы сделать репо: Установите для SecurityStamp значение NULL в базе данных. Сгенерируйте токен (работает нормально). Проверьте токен (не работает)

Другие вопросы по тегам