Patrząc na ASP.NET Identity (nowa implementacja członkostwa w ASP.NET), natknąłem się na ten interfejs podczas wdrażania własnego 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
jest implementowana domyślnie, EntityFramework.UserStore<TUser>
która zasadniczo pobiera i ustawia TUser.SecurityStamp
właściwość.
Po kilku dalszych poszukiwaniach okazuje się, że a SecurityStamp
jest Guid
nowo wygenerowanym w kluczowych punktach UserManager
(na przykład przy zmianie haseł).
Naprawdę nie mogę odszyfrować nic poza tym, ponieważ badam ten kod w Reflektorze . Prawie wszystkie symbole i informacje asynchroniczne zostały zoptymalizowane.
Ponadto Google nie pomogło.
Pytania są następujące:
- Co to jest
SecurityStamp
w ASP.NET Identity i do czego służy? - Czy
SecurityStamp
odgrywa jakąś rolę podczas tworzenia plików cookie uwierzytelniania? - Czy są jakieś konsekwencje dla bezpieczeństwa lub środki ostrożności, które należy w związku z tym podjąć? Na przykład nie wysyłaj tej wartości do klientów?
Aktualizacja (16.09.2014)
Kod źródłowy dostępny tutaj:
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Brian Chavez
źródło
źródło
Odpowiedzi:
Ma to reprezentować aktualny obraz poświadczeń użytkownika. Więc jeśli nic się nie zmieni, znaczek pozostanie taki sam. Ale jeśli hasło użytkownika zostanie zmienione lub login zostanie usunięty (odłącz swoje konto google / fb), znaczek się zmieni. Jest to potrzebne do takich rzeczy, jak automatyczne podpisywanie użytkowników / odrzucanie starych plików cookie, gdy to nastąpi, co jest funkcją, która pojawi się w wersji 2.0.
Tożsamość nie jest jeszcze open source, obecnie jest w przygotowaniu.
Edycja: zaktualizowano do wersji 2.0.0. Dlatego głównym celem
SecurityStamp
jest umożliwienie wylogowania się wszędzie. Podstawowym pomysłem jest to, że za każdym razem, gdy coś związanego z bezpieczeństwem zostanie zmienione na użytkowniku, na przykład hasło, dobrym pomysłem jest automatyczne unieważnienie wszelkich istniejących plików cookie logowania, więc jeśli Twoje hasło / konto zostało wcześniej przejęte, osoba atakująca nie ma już dostępu.W 2.0.0 dodaliśmy następującą konfigurację, aby podpiąć
OnValidateIdentity
metodę w,CookieMiddleware
aby sprawdzićSecurityStamp
i odrzucać pliki cookie, gdy uległa zmianie. Automatycznie odświeża również roszczenia użytkownika z bazy danych za każdym razem,refreshInterval
gdy znaczek pozostaje niezmieniony (co zajmuje się takimi rzeczami, jak zmiana ról itp.)Jeśli Twoja aplikacja chce bezpośrednio wywołać to zachowanie, może wywołać:
źródło
UseCookieAuthentication
jest przestarzały . Udało mi się to skonfigurować za pomocąservices.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
.UseCookieAuthentication jest obecnie przestarzała . Udało mi się to skonfigurować za pomocą
Przeniesiono z odpowiedzi na odpowiedź na żądanie .
źródło
Zauważyłem, że do weryfikacji tokena wymagany jest SecurityStamp.
Do repo: Ustaw SecurityStamp na null w bazie danych Wygeneruj token (działa poprawnie) Weryfikuj token (nie powiodło się)
źródło