Jak korzystać z własnej bazy danych z SimpleMembership i WebSecurity? Na czym polega Ochrona MVC4?
Przeczytałem wszystko na ten temat, co mogłem znaleźć, w tym artykuły MSDN i tak posty, ale nadal jestem bardzo zagubiony i zdezorientowany.
Pytania
Proszę odpowiedzieć na następujące (krótko, jeśli to możliwe):
Czym jest SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) i za co to jest/są odpowiedzialni?
Czym jest WebSecurity (WebMatrix.WebData )?
Co to jest Członkostwo (System.Www.Ochrona) Klasa?
Dlaczego MVC4 tworzy tabelę UserProfile i tabelę webpages_Membership ? Do czego służą i jaka jest różnica? Czym jest klasa UserProfile, którą tworzy MVC4?
Co to jest klasa UsersContext ?
Jak to wszystko działa, aby uwierzytelnić użytkownika?
Moja Sytuacja
Te pytania prowadzą do następnego problemu:
Załóżmy, że mam istniejącą bazę danych z użytkownikami (identyfikatory, nazwy użytkowników, hasła). Tworzę nową aplikację MVC4 i korzystam z uwierzytelniania formularzy. Hasła użytkowników są przechowywane w bazie danych w formie zaszyfrowanej (nie bcrypt).
Co muszę zrobić, aby działało z MVC4?
Czy muszę tworzyć własne MembershipProvider?
Moja Dotychczasowa Wiedza
Z tego co rozumiem, WebSecurity jest statycznym Klasa (moduł), która współdziała z MembershipProvider . MembershipProvider jest klasą, która wyjaśnia, jak działają poszczególne funkcje, takie jak ValidateUser, CreateUser, ChangePassword .
Aby rozwiązać mój problem zakładam, że muszę utworzyć niestandardowy MembershipProvider i powiedzieć WebSecurity, aby używać mojego nowego MembershipProvider.
Bounty?Wyznaczyłem nagrodę za to pytanie i zamierzam nagrodzić je Andy ' emu Brownowi za wybitną odpowiedz.
1 answers
Zobacz streszczenia poniżej każdego cytatu, aby uzyskać szybką odpowiedź, a akapity, aby uzyskać szczegółowe informacje. Zobacz również sekcję referencje na końcu dla autorytatywnych źródeł.
Streszczenia
1.Czym jest SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) i co to jest/są one odpowiedzialne?
SimpleMembership (termin obejmujący zarówno SimpleMembershipProvider
oraz SimpleRoleProvider
) jest odpowiedzialny za zapewnienie czystego i szybkiego sposobu wdrożenie 80% - tam plug and play uwierzytelniania i autoryzacji ramy z bezpiecznego przechowywania haseł, że każdy może korzystać.
2.Czym jest WebSecurity (WebMatrix.WebData)?
WebSecurity
jest klasą pomocniczą do wspólnych zadań członkowskich, która współpracuje z Membership
i OAuthWebSecurity
. Role są nadal dostępne oddzielnie poprzez Roles
.
3.Czym jest członkostwo (System.Www.Bezpieczeństwo) zajęcia?
Membership
jest klasą statyczną z oryginału ASP.NET implementacja członkostwa, która zarządza ustawieniami i operacjami użytkownika. Wiele operacji użytkownika jest nadal wykonywanych tutaj, zamiast powtarzać je w WebSecurity
. Obaj korzystają z tego samego dostawcy, którego wybrałeś.
4.Dlaczego MVC4 tworzy tabelę UserProfile i tabelę webpages_Membership? Do czego służą i jaka jest różnica? Co to jest klasa UserProfile, że MVC4 tworzy?
Dwie tabele pełnią różne funkcje. Schemat {[8] } jest kontrolowany przez framework i używany dla poświadczeń, schemat UserProfile
jest kontrolowany przez nas i używany dla wszelkich właściwości, które chcemy przechowywać przed użytkownikiem.
5.Czym jest klasa UsersContext?
Jest to DbContext
(część DbContext API ) dostarczana jako początek przez szablon aplikacji internetowej MVC. Jego jedynym zadaniem jest zawierać UserProfile
klasy możemy więc z nim pracować(np. poprzez InitializeSimpleMembershipAttribute
).
6.Jak to wszystko działa, aby uwierzytelnić użytkownika?
Powinno to być teraz widoczne z powyższych podsumowań i szczegółów poniżej. Użycie: WebSecurity
dla typowych zadań; UserProfile
dla niestandardowych właściwości do przechowywania przed użytkownikiem, dostępnych za pośrednictwem UsersContext
(w szablonie aplikacji internetowej MVC Visual Studio); Membership
Gdy WebSecurity
lub OAuthWebSecurity
nie ma metody; i Roles
dla ról. Użyj szablonu VS kontroler, aby zobaczyć przykłady użycia.
Edit . W razie gdyby ktoś dotarł tak daleko
Załóżmy, że mam istniejącą bazę danych ...
Jeśli masz istniejącą bazę danych, a jedynym powodem, dla którego piszesz niestandardowego dostawcę członkostwa jest radzenie sobie ze starszą metodą przechowywania haseł, możesz użyć obejścia. Będzie to działać tylko wtedy, gdy możesz odejść od Starego przechowywania haseł do algorytmu SimpleMembership (który używa Rfc2898DeriveBytes
klasy). Szczegóły w przypisie.
Jeśli nie możesz się wyprowadzić, to tak, będziesz musiał utworzyć własnego dostawcę, aby użyć konkretnego algorytmu hasła, co możesz zrobić , czerpiąc z SimpleMembershipProvider
.
Uwaga: SimpleMembershipProvider
będzie HASHOWAĆ hasła, a nie szyfrować je. Jeśli nie znasz różnicy i dlaczego jest to ważne, zastanów się dwa razy przed zrobieniem własnego dostawcy z niestandardowym bezpieczeństwo
Detal
1.Czym jest SimpleMembership / SimpleMembershipProvider]}
Aby zrozumieć, jak to wszystko do siebie pasuje, pomaga zrozumieć historię.
- ASP.NET w 2005 roku wprowadzono ASP.NET System członkowski
- ten system wykorzystywał dostawców do wyodrębniania szczegółów implementacji ze wspólnych interfejsów używanych do zarządzania kontami i rolami itp.
- dał nam również podstawowy " profil użytkownika" w 1999 roku w Polsce wprowadzono system zarządzania jakością ISO 9001.]}
- SimpleMembership został wydany na świecie w 2010 roku jako dostawca, który podłącza się do ASP.NET system membership, ale także pozwala na uwierzytelnianie OAuth, oraz właściwość-per-column user profile storage (zamiast pamięci pojedynczej kolumny używanej w oryginalnej implementacji).
-
SimpleMembershipProvider
narzędziaExtendedMembershipProvider
aby rozszerzyć pierwotnego dostawcę realizacja
ExtendedMembershipProvider
w sobie dodaje polecenia takie jak GeneratePasswordResetToken
do starych interfejsów API dostawcy członkostwa.
2.Czym jest WebSecurity (WebMatrix.WebData)?
WebSecurity
jest po prostu fasadą, czyli klasą pomocniczą, która zapewnia prosty dostęp do SimpleMembershipProvider
i sprawia, że typowe zadania są łatwe i dostępne w jednym miejscu. Jest tam zarówno po to, aby pomóc, jak i dlatego, że rozszerzenie oryginalnego frameworka przez ExtendedMembershipProvider
oznacza, że niektóre z oryginalnych klas, takich jak Membership
, nie są teraz wystarczające. Przykłady:
-
WebSecurity.CurrentUserName
- / align = "left" / aktualnie zalogowanego użytkownika -
WebSecurity.CreateUserAndAccount
. Jednocześnie Utwórz użytkownika i ustaw właściwości profilu użytkownika (np.]} -
WebSecurity.InitializeDatabaseConnection
- szybko skonfiguruj nową / istniejącą bazę danych do użytku z członkostwem, wybierz kolumnę ID użytkownika i identyfikator klucza naturalnego użytkownika itp. -
Aby zresetować hasło użytkownika,
GeneratePasswordResetToken
i wiele innych
Membership
, aby zapewnić wspólny punkt do wykonywania funkcji członkostwa.
Uwaga jest też OAuthWebSecurity
co jest odpowiednikiem WebSecurity
dla uwierzytelniania OAuth.
3.Czym jest członkostwo (System.Www.Klasa bezpieczeństwa?
Membership
jest z oryginalnej implementacji; zarządza ustawieniami użytkownika i wykonuje operacje związane z użytkownikiem przy użyciu podstawowej implementacji MembershipProvider
, która obecnie rozszerza się. Jest to statyczna Klasa, więc jest dostępna wszędzie tam, gdzie zadeklarujesz przestrzeń nazw, i dlatego jest łatwym sposobem na, na przykład, pobranie bieżącego użytkownika: Membership.GetUser
WebSecurity
jako zestaw narzędzi do operacji wyższego poziomu i Membership
jako zestaw narzędzi do robienia rzeczy użytkownikowi, będziesz w porządku; współpracują ze sobą u Twojego dostawcy.
4.Dlaczego MVC4 tworzy tabelę UserProfile a webpages_Membership table? Do czego służą i jaka jest różnica? Czym jest klasa UserProfile, którą tworzy MVC4?
- {[8] } jest tabelą ze stałym schematem, który zostawiamy w spokoju i pozwala dostawcy wykonywać podstawowe operacje konta, głównie przechowując poświadczenia.
-
{[9] } jest tabelą, którą dostosowujemy do przechowywania informacji na koncie użytkownika i udostępniamy ją w silnie wpisanym formacie za pośrednictwem klasy
UserProfile
. - jest dodatkowa tabela o nazwie
webpages_OAuthMembership
, która robi to samo cowebpages_Membership
, ale dla dostawców logowania OAuth, z którymi chcesz się zintegrować.
UserProfile
{84]}
Ogólnie rzecz biorąc, jeśli tabela zaczyna się od webpages_
, oznacza to, że istnieje API do niej dostęp. Tabela UserProfile
jest reprezentowana przez Klasa UserProfile
w UsersContext
(jeśli używasz domyślnego szablonu aplikacji internetowej MVC). Dlatego uzyskujemy do niego dostęp za pomocą zwykłych metod, których użyjemy z dowolną klasą zawartą w DbContext
.
UserProfile
jest bardzo przyjazny dla kodu: możesz dodać kolumny (takie jak adres użytkownika Email
), a następnie skonfigurować migrację, aby włączyć tę kolumnę do bazy danych w następnym wydaniu (jeśli chcesz używać migracji). W rzeczywistości tabela UserProfile
nie musi być tak nazywana - można to zmienić korzystanie z wywołania WebSecurity.InitializeDatabaseConnection
, [Table("UserProfile")] public class UserProfile
i własnych migracji.
5.Czym jest klasa UsersContext?
Jest to szablon aplikacji internetowej MVC dostarczony w Visual Studio New Project. Pierwszą rzeczą, którą robię, jest upewnienie się, że dzieli wspólny ciąg połączeń z moim własnym kontekstem bazy danych (zakładając, że tabele członkostwa są w tej samej bazie danych). Możesz to zmienić i odłączyć je później, jeśli chcesz.
Nie musisz go oddzielać od własnego kontekstu - jest to konieczne tylko, jeśli chcesz przechowywać informacje o członkostwie w innej bazie danych teraz lub w przyszłości, jeśli się go pozbędziesz, możesz po prostu zmienić odniesienia do UsersContext
do własnego kontekstu, dostosowując Database.SetInitializer
.
Referencje:
Korzystanie z SimpleMembership z ASP.NET strony internetowe-Matthew Osborn Jest to pierwsza wzmianka o prostym członkostwie i o tym, czym jest, dlaczego jest i co robi.]}
MSDN-Wprowadzenie do Członkostwo - Członkostwo jest nadal podstawą prostego członkostwa, więc pomaga zrozumieć trochę na ten temat.
- [[187]}codeplex source
WebSecurity
OAuthWebSecurity
SimpleMembershipProvider
ExtendedMembershipProvider
SimpleRoleProvider
Membership
Roles
DbContext
oraz DbContext API
Edytuj przypis: szczegóły dotyczące aktualizacji hasła]}
- W związku z tym, że konto nie jest w pełni funkcjonalne, nie jest w pełni funkcjonalne, nie jest w pełni funkcjonalne.]}
- w akcji "Login" wpisz kod tak, aby:
- Jeśli są na Twojej wersji hasła SimpleMembership, wykonaj normalne logowanie]}
- jeśli są na starszej wersji hasła,:
- sprawdź to korzystanie ze starej metody
- jeśli jest poprawne, zresetuj je używając
ResetPassword
, a następnieChangePassword
aby użyć wersji SimpleMembership, zaktualizuje to pole do nowej wersji hasła - i na koniec Zaktualizuj wersję hasła na
UserProfile
- jeśli są na starszej wersji hasła,:
- zaktualizuj inne metody AccountsController, które używają hasła w podobny sposób.
- Żyj z hacky workaround i łączenia się ze stołem
webpages_Membership
nie jesteśmy przeznaczeni do dotykania tak, jak nie miałeś aby napisać nowego dostawcę niestandardowego.
Jest możliwe, aby wszystko to transakcyjne z TransactionScope
. Jedyną nieprzyjemną rzeczą jest dodatkowy kod w kontrolerze i sprzężenie z webpages_Membership
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:17