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):

  1. Czym jest SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) i za co to jest/są odpowiedzialni?

  2. Czym jest WebSecurity (WebMatrix.WebData )?

  3. Co to jest Członkostwo (System.Www.Ochrona) Klasa?

  4. 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?

  5. Co to jest klasa UsersContext ?

  6. 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.

Author: Rowan Freeman, 2013-05-23

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ędzia ExtendedMembershipProvider aby rozszerzyć pierwotnego dostawcę realizacja
To jest Open Source na codeplex (mirrored na github). Jeśli chodzi o bezpieczeństwo, możesz więc samodzielnie ocenić kod, sklonować go, zmienić itp. Powinieneś wziąć swój własny pogląd na zalety i wady Z open source security , i ugotować to ze szczyptą NIH {93]}. (osobisty widok: używam go czasami, nie używam go innym razem )

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
Metody te zazwyczaj odkładają się na dostawcę, którego używasz, nie zależą tylko od SimpleMembership i wiążą ze sobą obiekty takie jak Twój dostawca i 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

Jest zamieszanie spowodowane faktem, że niektóre rzeczy robią, a nie inne, i że niektóre rzeczy robią, a nie inne. Jeśli wyświetlasz 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 co webpages_Membership, ale dla dostawców logowania OAuth, z którymi chcesz się zintegrować.
Magia tej konfiguracji polega na tym, że pojedynczy użytkownik może mieć logowanie Członkostwa na własnej stronie i dowolną liczbę logowań OAuth z różnymi dostawcami, takimi jak google, facebook, i wszyscy mają wspólny profil przechowywany w 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
(mirrored on github ).
  • 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ępnie ChangePassword aby użyć wersji SimpleMembership, zaktualizuje to pole do nowej wersji hasła
        • i na koniec Zaktualizuj wersję hasła na UserProfile
    • 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.

     182
    Author: Andy Brown,
    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