Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.SecuritySystem.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
- Powiązane ustawienia konfiguracji
- Authentication
- Autoryzacja
- Zabezpieczenia oparte na rolach
Przepływ zabezpieczeń z żądaniem
W poniższych krokach opisano sekwencję zdarzeń, gdy klient wysyła żądanie:
- Klient żąda strony .aspx znajdującej się na serwerze usług IIS.
- Poświadczenia klienta są przekazywane do usług IIS.
- Usługi IIS uwierzytelniają klienta i przekazują uwierzytelniony token wraz z żądaniem klienta do procesu roboczego ASP.NET.
- 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.
Powiązane ustawienia konfiguracji
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 systemu Windows
- Uwierzytelnianie za pomocą usługi Passport
- Domyślne uwierzytelnianie
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ą:
Aby uzyskać więcej informacji, zobacz następujący artykuł lub książki:
PRB: Request.ServerVariables("LOGON_USER") zwraca pusty ciąg w ASP.NET
Reilly, Douglas J. Projektowanie aplikacji firmy Microsoft ASP.NET. Microsoft Press, 2001.
Esposito, Dino. Tworzenie rozwiązań internetowych przy użyciu ASP.NET i ADO.NET. Microsoft Press, 2001.