Freigeben über


ASP.NET Sicherheitsübersicht

Dieser Artikel enthält eine Einführung in ASP.NET Sicherheit, sie bezieht sich auf die folgenden Microsoft .NET Framework-Klassenbibliotheksnamespaces:

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

Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 306590

Zusammenfassung

ASP.NET bietet Ihnen mehr Kontrolle über die Implementierung der Sicherheit für Ihre Anwendung. ASP.NET Sicherheit funktioniert in Verbindung mit Internetinformationsdienste (IIS)-Sicherheit und umfasst Authentifizierungs- und Autorisierungsdienste, um das ASP.NET Sicherheitsmodell zu implementieren. ASP.NET enthält auch ein rollenbasiertes Sicherheitsfeature, das Sie sowohl für Windows- als auch für Nicht-Windows-Benutzerkonten implementieren können.

Dieser Artikel ist in die folgenden Abschnitte unterteilt:

Sicherheitsfluss mit einer Anforderung

In den folgenden Schritten wird die Abfolge von Ereignissen beschrieben, wenn ein Client eine Anforderung sendet:

  1. Ein Client fordert eine .aspx Seite an, die sich auf einem IIS-Server befindet.
  2. Die Anmeldeinformationen des Clients werden an IIS übergeben.
  3. IIS authentifiziert den Client und leitet das authentifizierte Token zusammen mit der Anforderung des Clients an den ASP.NET Arbeitsprozess weiter.
  4. Basierend auf dem authentifizierten Token von IIS und den Konfigurationseinstellungen für die Webanwendung entscheidet ASP.NET, ob ein Benutzer im Thread, der die Anforderung verarbeitet, annehmen soll. Bei einem eindeutigen Unterschied zwischen Active Server Pages (ASP) und ASP.NET wird der authentifizierte Benutzer standardmäßig nicht mehr durch ASP.NET imitiert. Zum Aktivieren des Identitätswechsels müssen Sie das Identitätswechselattribut des Identitätsabschnitts in der Datei "Web.config " auf "true" festlegen.

Weitere Informationen zum Sicherheitsablauf finden Sie unter ASP.NET Datenfluss.

Weitere Informationen zum Identitätswechsel in ASP.NET finden Sie unter Implementieren des Identitätswechsels in einer ASP.NET Anwendung.

IIS verwaltet sicherheitsbezogene Konfigurationseinstellungen in der IIS-Metabasis. ASP.NET verwaltet jedoch Sicherheitseinstellungen (und andere) Konfigurationseinstellungen in XML-Konfigurationsdateien (Extensible Markup Language). Obwohl dies in der Regel die Bereitstellung Ihrer Anwendung aus Sicherheitsgründen vereinfacht, erfordert das Sicherheitsmodell, das Ihre Anwendung verwendet, die richtige Konfiguration sowohl der IIS-Metabasis als auch ihrer ASP.NET Anwendung über die Konfigurationsdatei (Web.config).

Die folgenden Konfigurationsabschnitte beziehen sich auf ASP.NET Sicherheit:

Authentifizierung

Die Authentifizierung ist der Prozess, mit dem Sie Identifikationsanmeldeinformationen wie den Namen und das Kennwort des Benutzers abrufen und diese Anmeldeinformationen anhand einer Autorität überprüfen.

ASP.NET bietet vier Authentifizierungsanbieter:

Formularauthentifizierung

Die Formularauthentifizierung bezieht sich auf ein System, in dem nicht authentifizierte Anforderungen an ein Html-Formular (Hypertext Markup Language) umgeleitet werden, in dem Benutzer ihre Anmeldeinformationen eingeben. Nachdem der Benutzer Anmeldeinformationen bereitgestellt und das Formular übermittelt hat, authentifiziert die Anwendung die Anforderung, und das System gibt ein Autorisierungsticket in Form eines Cookies aus. Dieses Cookie enthält die Anmeldeinformationen oder einen Schlüssel, um die Identität erneut zu erhalten. Nachfolgende Anforderungen aus dem Browser enthalten automatisch das Cookie.

Weitere Informationen zur Formularauthentifizierung finden Sie unter "Formularauthentifizierungsanbieter".

Weitere Informationen zur Formularauthentifizierung in ASP.NET finden Sie unter Implementieren der formularbasierten Authentifizierung in Ihrer ASP.NET Anwendung mithilfe von C#.NET.

Windows-Authentifizierung

In Windows-Authentifizierung führt IIS die Authentifizierung aus, und das authentifizierte Token wird an den ASP.NET Arbeitsprozess weitergeleitet. Der Vorteil der Verwendung von Windows-Authentifizierung besteht darin, dass sie minimale Codierung erfordert. Sie können Windows-Authentifizierung verwenden, um den Identitätswechsel des Windows-Benutzerkontos zu verwenden, das IIS authentifiziert, bevor Sie die Anforderung an ASP.NET übergeben.

Weitere Informationen zu Windows-Authentifizierung finden Sie unter "WindowsAuthenticationModule Provider".

Passport-Authentifizierung

Die Passport-Authentifizierung ist ein zentralisierter Authentifizierungsdienst, der von Microsoft bereitgestellt wird und einen einmaligen Anmelde- und Kernprofildienst für Mitgliedswebsites bietet. In der Regel wird die Passport-Authentifizierung verwendet, wenn Sie eine Single Sign-In-Funktion für mehrere Domänen benötigen.

Weitere Informationen zur Passport-Authentifizierung finden Sie im Passport-Authentifizierungsanbieter.

Standardauthentifizierung

Die Standardauthentifizierung wird verwendet, wenn Sie keine Sicherheit in Ihrer Webanwendung wünschen. Anonymer Zugriff ist für diesen Sicherheitsanbieter erforderlich. Unter allen Authentifizierungsanbietern bietet die Standardauthentifizierung maximale Leistung für Ihre Anwendung. Dieser Authentifizierungsanbieter wird auch verwendet, wenn Sie Ihr eigenes benutzerdefiniertes Sicherheitsmodul verwenden.

Autorisierung

Autorisierung ist der Prozess, der überprüft, ob der authentifizierte Benutzer Zugriff auf die angeforderten Ressourcen hat.

ASP.NET bietet die folgenden Autorisierungsanbieter an:

Dateiautorisierung

Die FileAuthorizationModule Klasse führt die Dateiautorisierung aus und ist aktiv, wenn Sie Windows-Authentifizierung verwenden. FileAuthorizationModule ist für die Durchführung von Überprüfungen für Windows Access Control Lists (ACLs) verantwortlich, um zu bestimmen, ob ein Benutzer Zugriff haben soll.

URL-Autorisierung

Die UrlAuthorizationModule Klasse führt die URL-Autorisierung (Uniform Resource Locator) durch, die die Autorisierung basierend auf dem URI-Namespace (Uniform Resource Identifier) steuert. URI-Namespaces können sich von den physischen Ordnern und Dateipfaden unterscheiden, die NTFS-Berechtigungen verwenden.

UrlAuthorizationModule implementiert sowohl positive als auch negative Autorisierungsbefugtungen; Das heißt, Sie können das Modul verwenden, um den Zugriff auf beliebige Teile des URI-Namespaces für Benutzer, Rollen (z. B. Vorgesetzte, Tester und Administratoren) und Verben (z GET . B. und POST) selektiv zuzulassen oder zu verweigern.

Weitere Informationen zur Autorisierung in ASP.NET finden Sie unter ASP.NET Autorisierung.

Rollenbasierte Sicherheit

Die rollenbasierte Sicherheit in ASP.NET ähnelt der rollenbasierten Sicherheit, die von Microsoft COM+ und Microsoft Transaction Server (MTS) verwendet wird, obwohl es wichtige Unterschiede gibt. Die rollenbasierte Sicherheit in ASP.NET ist nicht auf Windows-Konten und -Gruppen beschränkt. Wenn beispielsweise Windows-Authentifizierung und Identitätswechsel aktiviert sind, ist die Identität des Benutzers eine Windows-Identität (User.Identity.Name = "Domain\username"). Sie können Identitäten für die Mitgliedschaft in bestimmten Rollen überprüfen und den Zugriff entsprechend einschränken. Zum Beispiel:

Visual Basic .NET-Code

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

Visual C# .NET-Code

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");

Wenn Sie die Formularauthentifizierung verwenden, werden dem authentifizierten Benutzer keine Rollen zugewiesen. Sie müssen dies programmgesteuert ausführen. Um dem authentifizierten Benutzer Rollen zuzuweisen, verwenden Sie das OnAuthenticate Ereignis des Authentifizierungsmoduls (das Formularauthentifizierungsmodul in diesem Beispiel), um ein neues GenericPrincipal Objekt zu erstellen und es der User-Eigenschaft der .HttpContext Der folgende Code veranschaulicht Folgendes:

Visual Basic .NET-Code

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

Visual C# .NET-Code

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);
         }
    }
}

Um zu überprüfen, ob sich der Benutzer in einer bestimmten Rolle befindet und den Zugriff entsprechend einschränkt, verwenden Sie den folgenden Code (oder ähnliche) auf Ihren .aspx Seiten:

Visual Basic .NET-Code

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

Visual C# .NET-Code

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");

Weitere Informationen zur rollenbasierten Sicherheit finden Sie unter Rollenbasierte Sicherheit.

References

Allgemeine Informationen zu ASP.NET finden Sie in der folgenden Newsgroup:

ASP.NET Newsgroup

Weitere Informationen finden Sie im folgenden Artikel oder in büchern: