Omówienie zabezpieczeń ASP.NET

Ten artykuł zawiera wprowadzenie do zabezpieczeń ASP.NET, które odwołuje się do następujących przestrzeni nazw bibliotek klas programu Microsoft .NET Framework:

  • System.Web.Security
  • System.Web.Principal

Oryginalna wersja produktu: ASP.NET
Oryginalny numer KB: 306590

Podsumowanie

ASP.NET zapewnia większą kontrolę nad implementacją zabezpieczeń aplikacji. ASP.NET zabezpieczenia działają w połączeniu z zabezpieczeniami usług Internet Information Services (IIS) i obejmują usługi uwierzytelniania i autoryzacji w celu zaimplementowania modelu zabezpieczeń ASP.NET. ASP.NET zawiera również funkcję zabezpieczeń opartą na rolach, którą można zaimplementować zarówno dla kont użytkowników systemu Windows, jak i innych niż Windows.

Ten artykuł jest podzielony na następujące sekcje:

Przepływ zabezpieczeń z żądaniem

W poniższych krokach opisano sekwencję zdarzeń, gdy klient wysyła żądanie:

  1. Klient żąda strony .aspx znajdującej się na serwerze usług IIS.
  2. Poświadczenia klienta są przekazywane do usług IIS.
  3. Usługi IIS uwierzytelniają klienta i przekazują uwierzytelniony token wraz z żądaniem klienta do procesu roboczego ASP.NET.
  4. Na podstawie uwierzytelnionego tokenu z usług IIS i ustawień konfiguracji aplikacji internetowej ASP.NET decyduje, czy personifikować użytkownika w wątku, który przetwarza żądanie. W odrębnej różnicy między stronami Active Server Pages (ASP) i ASP.NET ASP.NET nie personifikuje już uwierzytelnionego użytkownika domyślnie. Aby włączyć personifikację, należy ustawić atrybut personifikacji sekcji identity w pliku Web.config na true.

Aby uzyskać więcej informacji na temat przepływu zabezpieczeń, zobacz ASP.NET Przepływ danych.

Aby uzyskać więcej informacji na temat personifikacji w ASP.NET, zobacz Jak zaimplementować personifikację w aplikacji ASP.NET.

Usługi IIS utrzymują ustawienia konfiguracji związane z zabezpieczeniami w metabazie usług IIS. Jednak ASP.NET zachowuje ustawienia konfiguracji zabezpieczeń (i innych) w plikach konfiguracji extensible Markup Language (XML). Chociaż zwykle upraszcza to wdrażanie aplikacji z punktu widzenia zabezpieczeń, model zabezpieczeń, który aplikacja przyjmuje, wymaga prawidłowej konfiguracji zarówno metabazy usług IIS, jak i aplikacji ASP.NET za pośrednictwem pliku konfiguracji (Web.config).

Następujące sekcje konfiguracji są związane z zabezpieczeniami ASP.NET:

Uwierzytelnianie

Uwierzytelnianie to proces, za pomocą którego uzyskujesz poświadczenia identyfikacji, takie jak nazwa użytkownika i hasło, i weryfikujesz te poświadczenia względem określonego urzędu.

ASP.NET oferuje czterech dostawców uwierzytelniania:

Uwierzytelnianie formularzy

Uwierzytelnianie formularzy odwołuje się do systemu, w którym nieuwierzytelnione żądania są przekierowywane do formularza języka znaczników hipertekstowych (HTML), w którym użytkownicy wpiszą swoje poświadczenia. Po podaniu poświadczeń i przesłaniu formularza aplikacja uwierzytelnia żądanie, a system wystawia bilet autoryzacji w postaci pliku cookie. Ten plik cookie zawiera poświadczenia lub klucz do ponownego uzyskania tożsamości. Kolejne żądania z przeglądarki automatycznie dołączają plik cookie.

Aby uzyskać więcej informacji na temat uwierzytelniania formularzy, zobacz Dostawca uwierzytelniania formularzy.

Aby uzyskać więcej informacji Na temat uwierzytelniania formularzy w ASP.NET, zobacz How To Implement Forms-Based Authentication in Your ASP.NET Application by Using C#.NET (Jak implementować uwierzytelnianie oparte na formularzach w aplikacji ASP.NET przy użyciu języka C#.NET).

Uwierzytelnianie systemu Windows

W przypadku uwierzytelniania systemu Windows usługi IIS przeprowadzają uwierzytelnianie, a uwierzytelniony token jest przekazywany do procesu roboczego ASP.NET. Zaletą uwierzytelniania systemu Windows jest to, że wymaga minimalnej ilości kodu. Możesz użyć uwierzytelniania systemu Windows do personifikacji konta użytkownika systemu Windows, które usługi IIS uwierzytelniają przed przekazaniem żądania do ASP.NET.

Aby uzyskać więcej informacji na temat uwierzytelniania systemu Windows, zobacz Dostawca WindowsAuthenticationModule.

Uwierzytelnianie za pomocą usługi Passport

Uwierzytelnianie za pomocą usługi Passport to scentralizowana usługa uwierzytelniania udostępniana przez firmę Microsoft, która oferuje usługi logowania jednokrotnego i podstawowego profilu dla witryn członkowskich. Zazwyczaj uwierzytelnianie usługi Passport jest używane, gdy potrzebujesz możliwości logowania jednokrotnego w wielu domenach.

Aby uzyskać więcej informacji na temat uwierzytelniania usługi Passport, zobacz Dostawca uwierzytelniania usługi Passport.

Domyślne uwierzytelnianie

Uwierzytelnianie domyślne jest używane, gdy nie ma żadnych zabezpieczeń w aplikacji internetowej; Dla tego dostawcy zabezpieczeń wymagany jest dostęp anonimowy. Wśród wszystkich dostawców uwierzytelniania uwierzytelnianie domyślne zapewnia maksymalną wydajność aplikacji. Ten dostawca uwierzytelniania jest również używany podczas korzystania z własnego niestandardowego modułu zabezpieczeń.

Autoryzacja

Autoryzacja to proces, który sprawdza, czy uwierzytelniony użytkownik ma dostęp do żądanych zasobów.

ASP.NET oferuje następujących dostawców autoryzacji:

Autoryzacja pliku

Klasa FileAuthorizationModule wykonuje autoryzację plików i jest aktywna podczas korzystania z uwierzytelniania systemu Windows. FileAuthorizationModule jest odpowiedzialny za przeprowadzanie kontroli na listach kontroli dostępu systemu Windows (ACL) w celu określenia, czy użytkownik powinien mieć dostęp.

Autoryzacja adresu URL

Klasa UrlAuthorizationModule wykonuje autoryzację ujednoliconego lokalizatora zasobów (URL), która kontroluje autoryzację na podstawie przestrzeni nazw identyfikatora URI. Przestrzenie nazw identyfikatorów URI mogą różnić się od ścieżek folderów fizycznych i plików używanych przez uprawnienia systemu plików NTFS.

UrlAuthorizationModule implementuje zarówno pozytywne, jak i negatywne potwierdzenia autoryzacji; Oznacza to, że można użyć modułu, aby selektywnie zezwolić na dostęp do dowolnych części przestrzeni nazw identyfikatora URI dla użytkowników, ról (takich jak menedżer, testerzy i administratorzy) oraz czasowników (takich jak GET i POST).

Aby uzyskać więcej informacji na temat autoryzacji w ASP.NET, zobacz ASP.NET Authorization (Autoryzacja ASP.NET).

Zabezpieczenia oparte na rolach

Zabezpieczenia oparte na rolach w ASP.NET są podobne do zabezpieczeń opartych na rolach używanych przez microsoft COM+ i microsoft Transaction Server (MTS), chociaż istnieją istotne różnice. Zabezpieczenia oparte na rolach w ASP.NET nie są ograniczone do kont i grup systemu Windows. Jeśli na przykład włączono uwierzytelnianie systemu Windows i personifikację, tożsamość użytkownika to tożsamość systemu Windows (User.Identity.Name = "Domain\username"). Tożsamości można sprawdzić pod kątem członkostwa w określonych rolach i odpowiednio ograniczyć dostęp. Na przykład:

Kod platformy .NET w języku Visual Basic

If User.IsInRole("BUILTIN\Administrators") Then
    Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
    Response.Write("You are a User")
Else
    Response.Write("Invalid user")
End if

Kod platformy .NET w języku Visual C#

if ( User.IsInRole("BUILTIN\\Administrators"))
    Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
    Response.Write("You are a User");
else
    Response.Write("Invalid user");

Jeśli używasz uwierzytelniania formularzy, role nie są przypisane do uwierzytelnioowanego użytkownika; Należy to zrobić programowo. Aby przypisać role do uwierzytelnionego użytkownika, użyj OnAuthenticate zdarzenia modułu uwierzytelniania (który jest modułem uwierzytelniania formularzy w tym przykładzie), aby utworzyć nowy GenericPrincipal obiekt i przypisać go do właściwości User obiektu HttpContext. Poniższy kod ilustruje to:

Kod platformy .NET w języku Visual Basic

Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
    If (Not(HttpContext.Current.User Is Nothing)) Then
        If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
            Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
            Dim myRoles(3) As String
            myRoles(0)= "managers"
            myRoles(1)= "testers"
            myRoles(2)= "developers"
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
        End If
    End If
End Sub

Kod platformy .NET w języku Visual C#

public void Application_AuthenticateRequest(Object s, EventArgs e)
{
    if (HttpContext.Current.User != null)
     {
         if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
         {
             System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
             String[] myRoles = new String[3];
             myRoles[0]= "managers";
             myRoles[1]= "testers";
             myRoles[2]= "developers";
             HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
         }
    }
}

Aby sprawdzić, czy użytkownik znajduje się w określonej roli i odpowiednio ograniczyć dostęp, użyj następującego kodu (lub podobnego) na stronach .aspx:

Kod platformy .NET w języku Visual Basic

If User.IsInRole("managers") Then
    Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
    Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
    Response.Write("You are a Developer")
End if

Kod platformy .NET w języku Visual C#

if (User.IsInRole("managers"))
    Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
    Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
    Response.Write("You are a Developer");

Aby uzyskać więcej informacji na temat zabezpieczeń opartych na rolach, zobacz Zabezpieczenia oparte na rolach.

Informacje

Aby uzyskać więcej ogólnych informacji na temat ASP.NET, zapoznaj się z następującą grupą dyskusyjną:

grupa dyskusyjna ASP.NET

Aby uzyskać więcej informacji, zobacz następujący artykuł lub książki: