Muszę zrobić coś dość prostego: w mojej aplikacji ASP.NET MVC chcę ustawić niestandardową IIdentity / IPrincipal. Którykolwiek jest łatwiejszy / bardziej odpowiedni. Chcę rozszerzyć wartość domyślną, aby móc wywoływać coś takiego jak User.Identity.Id
i User.Identity.Role
. Nic szczególnego, tylko dodatkowe właściwości.
Przeczytałem mnóstwo artykułów i pytań, ale wydaje mi się, że robię to trudniejszym niż jest w rzeczywistości. Myślałem, że będzie łatwo. Jeśli użytkownik się zaloguje, chcę ustawić niestandardową IIdentity. Pomyślałem więc, że zaimplementuję Application_PostAuthenticateRequest
w moim global.asax. Jest to jednak wywoływane przy każdym żądaniu i nie chcę wykonywać wywołania do bazy danych przy każdym żądaniu, które zażądałoby wszystkich danych z bazy danych i umieściłoby niestandardowy obiekt IPrincipal. Wydaje się to również bardzo niepotrzebne, powolne i w niewłaściwym miejscu (wykonywanie tam wywołań bazy danych), ale mogę się mylić. Lub skąd jeszcze pochodzą te dane?
Pomyślałem więc, że za każdym razem, gdy użytkownik się loguje, mogę dodać niezbędne zmienne do mojej sesji, które dodam do niestandardowej IIdentity w module Application_PostAuthenticateRequest
obsługi zdarzeń. Jednak moje tam Context.Session
jest null
, więc nie jest to również właściwa droga.
Pracuję nad tym przez jeden dzień i czuję, że coś mi umknęło. Nie powinno to być zbyt trudne, prawda? Jestem również trochę zdezorientowany wszystkimi (częściowo) powiązanymi z tym rzeczami. MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... ja jestem jedyną osobą, która wyszukuje wszystko to bardzo mylące?
Jeśli ktoś mógłby mi powiedzieć proste, eleganckie i wydajne rozwiązanie do przechowywania dodatkowych danych w IIdentity bez wszystkich dodatkowych problemów ... byłoby świetnie! Wiem, że na SO są podobne pytania, ale jeśli potrzebuję odpowiedzi, muszę to przeoczyć.
MemberShip...
, Principal
, Identity
. ASP.NET powinien uprościć, uprościć i maksymalnie dwa podejścia do uwierzytelniania.