ASP.NET Identity'nin IUserSecurityStampStore <TUser> arabirimi nedir?


178

ASP.NET Identity'ye (ASP.NET'te yeni üyelik uygulaması) bakarken, kendi arayüzümü uygularken bu arayüze rastladım 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, özelliği EntityFramework.UserStore<TUser>almak ve ayarlamak için varsayılan olarak uygulanır TUser.SecurityStamp.

Biraz daha kazma işleminden sonra , a'nın anahtar noktalarında yeni oluşturulan SecurityStampbir a olduğu görülür (örneğin, şifreleri değiştirme).GuidUserManager

Reflector'da bu kodu incelediğim için bunun ötesinde gerçekten deşifre edemiyorum . Hemen hemen tüm sembol ve eşzamansız bilgiler optimize edildi.

Ayrıca, Google çok yardımcı olmadı.

Sorular:

  • Bir nedir SecurityStampASP.NET Kimlik ve bunun için kullanılan nedir?
  • SecurityStampKimlik doğrulama çerezleri oluşturulduğunda herhangi bir rol oynuyor mu ?
  • Bununla ilgili alınması gereken herhangi bir güvenlik önlemi veya önlemi var mı? Örneğin, bu değeri akış aşağıya istemcilere göndermiyor musunuz?

Güncelleme (16.09.2014)

Kaynak kodu burada bulunabilir:


1
@TryingToImprove, yeni Kimlik deposu ve bağımlı OWIN ara katman yazılımı son derece özelleştirilebilir olacak şekilde tasarlanmıştır. SimpleMembership gibi, SQL Express'teki en son EF'den yararlanan kullanıma hazır bir uygulama var. Ancak Şema, Veri sorgulama yöntemi, Veritabanı kaynağı ve hatta orta eşya, özel puprozunuz etrafında özelleştirilebilir. Dahası, MS tarafından yayınlanan uygulamanın kendisi hala gelişmektedir. Bu yüzden herkes belirli bir tanım bulmakta zorlanıyor.
Dave Alperovich

Yanıtlar:


224

Bu, kullanıcı kimlik bilgilerinizin geçerli anlık görüntüsünü temsil eder. Yani hiçbir şey değişmezse, damga aynı kalacaktır. Ancak, kullanıcının şifresi değiştirilirse veya bir giriş kaldırılırsa (google / fb hesabınızın bağlantısını kaldırın), damga değişecektir. Bu, kullanıcıları otomatik olarak imzalama / eski çerezleri reddetme gibi şeyler için gereklidir; bu, 2.0'da gelen bir özelliktir.

Kimlik henüz açık kaynak değil, halen boru hattında.

Düzenleme: 2.0.0 için güncellendi. Yani asıl amacı SecurityStampher yerde oturumu kapatmaktır. Temel fikir, kullanıcıyla ilgili bir şifre gibi bir şifre değiştiğinde, mevcut herhangi bir oturum açma çerezini otomatik olarak geçersiz kılmak iyi bir fikirdir, bu nedenle şifreniz / hesabınız daha önce ele geçirilmişse saldırganın artık erişimi yoktur.

2.0.0'da , değiştiğinde çerezlere bakmak ve reddetmek için OnValidateIdentityyöntemi bağlamak için aşağıdaki yapılandırmayı ekledik . Ayrıca , damga değişmezse kullanıcının rollerini veritabanından otomatik olarak yeniler (bu, rol değiştirme gibi şeylerle ilgilenir)CookieMiddlewareSecurityStamprefreshInterval

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))
    }
});

Uygulamanız bu davranışı açıkça tetiklemek istiyorsa şunu çağırabilir:

UserManager.UpdateSecurityStampAsync(userId);

1
MVC4 tablo yapısından veri taşıyorsam ne olur? Bu alanı boş bırakabilir miyim? Yoksa bir şekilde işleri mahvedecek mi?
Dmytro Shevchenko

1
Etkin bir şekilde hayır-op yapmak için kimliğini veya sabit bir şeyi döndürmesini sağlayabilirsiniz. Null / "" da muhtemelen işe yarar.
Hao Kung

2
UserManager.UpdateSecurityStampAsync (userId) UseOAuthBearerTokens için çalışıyor mu?
Rikard

7
Hayır, OAuthBearerTokens şu anda etkilenmemektedir.
Hao Kung

3
Şimdiye kadar UseCookieAuthenticationkullanımdan kaldırıldı . Bunu kullanarak yapılandırmayı başardım services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));.
riezebosch

11

UseCookieAuthentication şu an kullanımdan kaldırıldı . Kullanarak yapılandırmayı başardım

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

İstek başına yanıttan yanıta taşındı .


3
ASP.NET (Core değil) kullanıyorsam bu işe yarar mı? Kafam karıştı. Asp Identity Repo'ya gidersem , Asp.NET Core için olduğu söylenir.
El Mac

5

Token doğrulaması için SecurityStamp'ın gerekli olduğunu gözlemledim.

Yanıtlamak için: SecurityStamp'ı veritabanında null olarak ayarlayın Bir belirteç oluştur (çalışıyor) Belirteç doğrula (başarısız)


Bu bir hata olmalı. Doğrulanamayan bir jeton oluşturmak hiç mantıklı değil.
William T. Mallard

Hata, güvenlik damgası boş olduğunda bir belirteç oluşturmanıza izin vermesidir. (imho GenerateEmailConfirmationToken, güvenlik damgası yoksa başarısız olmalıdır. Bu yanıta bakın: stackoverflow.com/a/29926407/1058214 )
mendel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.