Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 15478|Odpowiedź: 0

[ASP.NET] Uwierzytelnianie użytkownika i ról oparte na uwierzytelnianiu FormsAuthentication

[Skopiuj link]
Opublikowano 19.07.2018 17:31:14 | | |
W normalnych okolicznościach, gdy zarządzamy prawami dostępu, zapisujemy podstawowe dane użytkownika po poprawnym zalogowaniu w sesji i otrzymujemy je za każdym razem, gdy użytkownik zażąda danych strony lub interfejsu w przyszłości

Sesja, aby sprawdzić i porównać, czy jest zalogowany i czy może uzyskać dostęp do aktualnej strony.

       Zasada Session polega na wygenerowaniu SessionID po stronie serwera odpowiadającego przechowywanym danym użytkownika, a SessionID jest przechowywany w ciasteczku, a klient przenosi go ze sobą za każdym razem, gdy zostanie o to zamówione

Cookie, serwer znajduje dane przechowywane po stronie serwera na podstawie identyfikatora sesji w ciasteczku.

       FormsAuthentication jest udostępnione przez Microsoft dla nas, deweloperów, do uwierzytelniania. Dzięki tej weryfikacji możemy przechowywać nazwę użytkownika i niektóre dane użytkownika w ciasteczkach,

Podstawowe uwierzytelnianie tożsamości i roli można łatwo osiągnąć poprzez podstawowe ustawienia warunków.

       Efektem osiągnięcia jest wdrożenie kontroli dostępu opartej na rolach przy użyciu systemowego Authorize bez konieczności korzystania z członkostwa.

1. Utworzenie zgłoszenia

Po zalogowaniu się użytkownik w zgłoszeniu zapisuje jego identyfikator oraz odpowiadająca mu rola (dla wielu ról, oddzielnie).

Zaszyfruj zgłoszenie za pomocą FormsAuthentication.Encrypt.

Zapisz zaszyfrowany ticket w ciasteczku Response (klient js nie musi odczytywać tego cookie, więc najlepiej ustawić HttpOnly=True, aby zapobiec kradzieży i fałszowaniu plików cookie przez ataki przeglądarki). Dzięki temu następnym razem możesz przeczytać go z ciasteczka Request.

Proste demo wygląda następująco:


bool isPersistent, //czy zachować (ustaw w zależności od potrzeby, jeśli ustawiono na persistence, ustawienie Expires ciasteczka musi być ustawione podczas wysyłania ciasteczka)

Szósty parametr FormsAuthenticationTicket przechowuje userData ciągu typu, gdzie przechowywany jest identyfikator roli aktualnego użytkownika, oddzielony przecinkem.

Podczas logowania się za pomocą nazwy użytkownika "test", na kliencie pojawia się ciasteczko log cookie


2. Uzyskanie informacji o certyfikacji

Po zalogowaniu na stronie treści możemy uzyskać informacje o uname przez User.Identity.Name aktualnego żądania lub odszyfrować ciasteczko w żądaniu, aby pobrać zgłoszenie, a następnie uzyskać uname i userData (czyli wcześniej przechowywane dane ID roli) z niego.


3. Realizacja kontroli dostępu do uprawnień poprzez atrybuty adnotacji

Konfiguruj Włączenie uwierzytelniania formularza i zarządzania rolami w web.config

Kiedy dodajemy właściwości adnotacji do Controller i Action, skąd bierzemy ustawioną rolę? Ponieważ nie korzystamy z uwierzytelniania opartego na członkostwie, stworzymy też niestandardowego RoleProvidera. Nazwa to CustomRoleProvider, która została odziedziczona po RoleProvider. Oto utworzenie własnego pliku CustomRoleProvider.cs w folderze Helper pod MVCApp.

W RoleProvider istnieje wiele abstrakcyjnych metod, a my implementujemy tylko metodę GetRolesForUser, aby uzyskać role użytkowników. Rola użytkownika może być zapytania z bazy danych na podstawie uzyskanego identyfikatora użytkownika lub tego zapisanego w sesji lub w ciasteczku. Tutaj już zapisałem rolę w userData zgłoszenia, więc pobierz ją z ticketu.

W razie potrzeby dodaj atrybuty adnotacji do zweryfikowanego kontrolera lub akcji, na przykład ta akcja pozwala na dostęp tylko z identyfikatorem roli 1, 2 lub 3, a aktualne identyfikatory roli użytkownika to (7, 1, 8), co oznacza, że użytkownik ma prawo do dostępu.

P.S. :1. Zgłoszenie jest przechowywane w momencie wygaśnięcia ciasteczek, a jeśli przeglądarka jest zamknięta, aby zapamiętać aktualne zgłoszenie, parametry można ustawić podczas instancji FormsAuthenticationTicket.

2. Przejęcie roli można odczytać bezpośrednio z bazy danych, bez konieczności zapisywania w userData zgłoszenia, a userData może przechowywać inne informacje.

3. Jeśli chcesz elastycznie skonfigurować dozwolone role dostępu kontrolera i akcji, możesz dostosować metodę OnAuthorization w nadpisowaniu AuthorizeAttribute (AuthorizeAttribute override), w którym metoda jest używana

      Przeczytaj identyfikator roli, który jest dozwolony na bieżącej stronie i sprawdź go zgodnie z RoleID aktualnego użytkownika. W ten sposób realizowana jest elastyczna konfiguracja roli.

            4. Informacje zawarte w zgłoszeniu są ostatecznie przechowywane w ciasteczku, a bezpieczeństwo nadal zależy od twojego uznania, osobiście uważam, że lepiej przechowywać UserID i RoleID w sesji.





Poprzedni:Mapa Baidu: Rozwiąż rozwiązanie opóźnienia markerów agregacji punktów
Następny:Rekrutuj partnerów technicznych
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com