Uwierzytelnianie użytkowników za pomocą uwierzytelniania formularzy (VB)

autor: Microsoft

Dowiedz się, jak używać atrybutu [Authorize] do ochrony haseł określonych stron w aplikacji MVC. Dowiesz się, jak za pomocą narzędzia administracyjnego witryny sieci Web tworzyć użytkowników i role oraz zarządzać nimi. Dowiesz się również, jak skonfigurować miejsce przechowywania informacji o koncie użytkownika i roli.

Celem tego samouczka jest wyjaśnienie sposobu używania uwierzytelniania formularzy do ochrony widoków w aplikacjach MVC ASP.NET. Dowiesz się, jak używać narzędzia administracji witrynami sieci Web do tworzenia użytkowników i ról. Dowiesz się również, jak uniemożliwić nieautoryzowanym użytkownikom wywoływanie akcji kontrolera. Na koniec dowiesz się, jak skonfigurować miejsce przechowywania nazw użytkowników i haseł.

Korzystanie z narzędzia do administrowania witrynami sieci Web

Zanim zrobimy cokolwiek innego, powinniśmy zacząć od utworzenia niektórych użytkowników i ról. Najprostszym sposobem tworzenia nowych użytkowników i ról jest skorzystanie z narzędzia do administrowania witrynami sieci Web programu Visual Studio 2008. To narzędzie można uruchomić, wybierając opcję menu Projekt, ASP.NET Konfiguracja. Alternatywnie możesz uruchomić narzędzie administracji witrynami sieci Web, klikając (nieco przerażającą) ikonę młotka uderzając w świat, który pojawia się w górnej części okna Eksplorator rozwiązań (zobacz Rysunek 1).

Rysunek 1. Uruchamianie narzędzia administracyjnego witryny sieci Web

clip_image002[4]

W narzędziu do administrowania witrynami sieci Web można tworzyć nowych użytkowników i role, wybierając kartę Zabezpieczenia. Kliknij link Utwórz użytkownika , aby utworzyć nowego użytkownika o nazwie Stephen (zobacz Rysunek 2). Podaj użytkownikowi Stephen dowolne hasło (na przykład wpis tajny).

Rysunek 2. Tworzenie nowego użytkownika

clip_image004[4]

Nowe role można tworzyć, włączając najpierw role i definiując co najmniej jedną rolę. Włącz role, klikając link Włącz role . Następnie utwórz rolę o nazwie Administratorzy , klikając link Tworzenie ról lub zarządzanie nimi (zobacz Rysunek 3).

Rysunek 3. Tworzenie nowej roli

clip_image006[4]

Na koniec utwórz nowego użytkownika o nazwie Sally i skojarz aplikację Sally z rolą Administratorzy, klikając link Utwórz użytkownika i wybierając pozycję Administratorzy podczas tworzenia aplikacji Sally (zobacz Rysunek 4).

Rysunek 4. Dodawanie użytkownika do roli

clip_image008[4]

Kiedy wszystko jest powiedziane i gotowe, powinieneś mieć dwóch nowych użytkowników o imieniu Stephen i Sally. Powinna być również dostępna nowa rola o nazwie Administratorzy. Sally jest członkiem roli Administratorzy, a Stephen nie jest.

Wymaganie autoryzacji

Możesz wymagać uwierzytelnienia użytkownika, zanim użytkownik wywoła akcję kontrolera, dodając atrybut [Authorize] do akcji. Można zastosować atrybut [Authorize] do akcji pojedynczego kontrolera lub można zastosować ten atrybut do całej klasy kontrolera.

Na przykład kontroler na liście 1 uwidacznia akcję o nazwie CompanySecrets(). Ponieważ ta akcja jest ozdobiona atrybutem [Autoryzuj], tej akcji nie można wywołać, chyba że użytkownik jest uwierzytelniony.

Lista 1 — Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function

End Class

Jeśli wywołasz akcję CompanySecrets(), wprowadzając adres URL /Home/CompanySecrets na pasku adresu przeglądarki i nie jesteś uwierzytelnionym użytkownikiem, nastąpi automatyczne przekierowanie do widoku logowania (zobacz Rysunek 5).

Rysunek 5 . Widok logowania

clip_image010[4]

Możesz użyć widoku Logowania, aby wprowadzić nazwę użytkownika i hasło. Jeśli nie jesteś zarejestrowanym użytkownikiem, możesz kliknąć link zarejestruj , aby przejść do widoku Zarejestruj (zobacz Rysunek 6). Aby utworzyć nowe konto użytkownika, możesz użyć widoku Zarejestruj.

Rysunek 6. Widok rejestru

clip_image012

Po pomyślnym zalogowaniu można wyświetlić widok CompanySecrets (zobacz Rysunek 7). Domyślnie logowanie będzie kontynuowane do momentu zamknięcia okna przeglądarki.

Rysunek 7. Widok CompanySecrets

clip_image014

Autoryzowanie według nazwy użytkownika lub roli użytkownika

Atrybutu [Autoryzuj] można użyć, aby ograniczyć dostęp do akcji kontrolera do określonego zestawu użytkowników lub określonego zestawu ról użytkownika. Na przykład zmodyfikowany kontroler macierzysty na liście 2 zawiera dwie nowe akcje o nazwach StephenSecrets() i AdministratorSecrets().

Lista 2 — Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function


    <Authorize(Users:="Stephen")> _
    Function StephenSecrets()
        Return View()
    End Function

    <Authorize(Roles:="Administrators")> _
    Function AdministratorSecrets()
        Return View()
    End Function

End Class

Tylko użytkownik o nazwie użytkownika Stephen może wywołać akcję StephenSecrets(). Wszyscy inni użytkownicy są przekierowywani do widoku logowania. Właściwość Users akceptuje rozdzielaną przecinkami listę nazw kont użytkowników.

Tylko użytkownicy w roli Administratorzy mogą wywoływać akcję AdministratorSecrets(). Na przykład, ponieważ Sally jest członkiem grupy Administratorzy, może wywołać akcję AdministratorSecrets(). Wszyscy inni użytkownicy są przekierowywani do widoku logowania. Właściwość Role akceptuje rozdzielaną przecinkami listę nazw ról.

Konfigurowanie uwierzytelniania

W tym momencie możesz się zastanawiać, gdzie są przechowywane informacje o koncie użytkownika i roli. Domyślnie informacje są przechowywane w bazie danych SQL Express o nazwie ASPNETDB.mdf znajdującej się w folderze App_Data aplikacji MVC. Ta baza danych jest generowana przez platformę ASP.NET automatycznie po rozpoczęciu korzystania z członkostwa.

Aby wyświetlić bazę danych ASPNETDB.mdf w oknie Eksplorator rozwiązań, należy najpierw wybrać opcję menu Project (Projekt), Show All Files (Pokaż wszystkie pliki).

Używanie domyślnej bazy danych SQL Express jest w porządku podczas tworzenia aplikacji. Najprawdopodobniej jednak nie chcesz używać domyślnej bazy danych ASPNETDB.mdf dla aplikacji produkcyjnej. W takim przypadku możesz zmienić miejsce przechowywania informacji o koncie użytkownika, wykonując następujące dwa kroki:

  1. Dodawanie obiektów bazy danych usług Application Services do produkcyjnej bazy danych — zmień parametry połączenia aplikacji, aby wskazywały produkcyjną bazę danych

Pierwszym krokiem jest dodanie wszystkich niezbędnych obiektów bazy danych (tabel i procedur składowanych) do produkcyjnej bazy danych. Najprostszym sposobem dodania tych obiektów do nowej bazy danych jest skorzystanie z Kreatora instalacji ASP.NET SQL Server (zobacz Rysunek 8). To narzędzie można uruchomić, otwierając wiersz polecenia programu Visual Studio 2008 z grupy programu Microsoft Visual Studio 2008 i wykonując następujące polecenie w wierszu polecenia:

aspnet_regsql

Rysunek 8 . Kreator instalacji ASP.NET SQL Server

clip_image016

Kreator instalacji ASP.NET SQL Server umożliwia wybranie bazy danych SQL Server w sieci i zainstalowanie wszystkich obiektów bazy danych wymaganych przez usługi aplikacji ASP.NET. Serwer bazy danych nie musi znajdować się na komputerze lokalnym.

Uwaga

Jeśli nie chcesz używać Kreatora instalacji ASP.NET SQL Server, możesz znaleźć skrypty SQL służące do dodawania obiektów bazy danych usług aplikacji w następującym folderze:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

Po utworzeniu niezbędnych obiektów bazy danych należy zmodyfikować połączenie bazy danych używane przez aplikację MVC. Zmodyfikuj parametry połączenia applicationServices w pliku konfiguracji internetowej (web.config), tak aby wskazywały produkcyjną bazę danych. Na przykład zmodyfikowane połączenie z listą 3 wskazuje bazę danych o nazwie MyProductionDB (oryginalne parametry połączenia ApplicationServices zostały skomentowane).

Lista 3 — Web.config

<connectionStrings>

<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->

<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />

</connectionStrings>

Konfigurowanie uprawnień bazy danych

Jeśli używasz zintegrowanych zabezpieczeń do nawiązywania połączenia z bazą danych, musisz dodać poprawne konto użytkownika systemu Windows jako identyfikator logowania do bazy danych. Prawidłowe konto zależy od tego, czy używasz serwera deweloperów ASP.NET, czy internetowych usług informacyjnych jako serwera internetowego. Prawidłowe konto użytkownika zależy również od systemu operacyjnego.

Jeśli używasz serwera ASP.NET Development Server (domyślnego serwera internetowego używanego przez program Visual Studio), aplikacja jest wykonywana w kontekście konta użytkownika systemu Windows. W takim przypadku należy dodać konto użytkownika systemu Windows jako identyfikator logowania serwera bazy danych.

Alternatywnie, jeśli używasz internetowych usług informacyjnych, musisz dodać konto ASPNET lub konto NT AUTHORITY/NETWORK SERVICE jako identyfikator logowania serwera bazy danych. Jeśli używasz systemu Windows XP, dodaj konto ASPNET jako identyfikator logowania do bazy danych. Jeśli używasz nowszego systemu operacyjnego, takiego jak Windows Vista lub Windows Server 2008, dodaj konto NT AUTHORITY/NETWORK SERVICE jako identyfikator logowania bazy danych.

Nowe konto użytkownika można dodać do bazy danych przy użyciu usługi Microsoft SQL Server Management Studio (zobacz Rysunek 9).

Rysunek 9 . Tworzenie nowego identyfikatora logowania usługi Microsoft SQL Server

clip_image018

Po utworzeniu wymaganego identyfikatora logowania należy zamapować identyfikator logowania do użytkownika bazy danych z odpowiednimi rolami bazy danych. Kliknij dwukrotnie nazwę logowania i wybierz kartę Mapowanie użytkownika. Wybierz co najmniej jedną rolę bazy danych usług aplikacji. Aby na przykład uwierzytelnić użytkowników, musisz włączyć rolę bazy danych aspnet_Membership_BasicAccess. Aby utworzyć nowych użytkowników, musisz włączyć rolę bazy danych aspnet_Membership_FullAccess (zobacz Rysunek 10).

Rysunek 10 . Dodawanie ról bazy danych usług aplikacji

clip_image020

Podsumowanie

W tym samouczku przedstawiono sposób używania uwierzytelniania formularzy podczas tworzenia aplikacji ASP.NET MVC. Najpierw przedstawiono sposób tworzenia nowych użytkowników i ról, korzystając z narzędzia do administrowania witrynami sieci Web. Następnie przedstawiono sposób używania atrybutu [Autoryzuj], aby uniemożliwić nieautoryzowanym użytkownikom wywoływanie akcji kontrolera. Na koniec przedstawiono sposób konfigurowania aplikacji MVC w celu przechowywania informacji o użytkowniku i roli w produkcyjnej bazie danych.