übersicht über ASP.NET-Sicherheit

Dieser Artikel enthält eine Einführung in ASP.NET Sicherheit und bezieht sich auf die folgenden Namespaces der Microsoft .NET Framework-Klassenbibliothek:

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

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

Zusammenfassung

ASP.NET bietet Ihnen mehr Kontrolle, um die Sicherheit für Ihre Anwendung zu implementieren. ASP.NET Sicherheit funktioniert in Verbindung mit iis-Sicherheit (Internet Information Services) und umfasst Authentifizierungs- und Autorisierungsdienste zum Implementieren des ASP.NET Sicherheitsmodells. 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

Die folgenden Schritte beschreiben die Abfolge der Ereignisse, 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 die Identität eines Benutzers in dem Thread angenommen werden soll, der die Anforderung verarbeitet. In einem deutlichen Unterschied zwischen Active Server Pages (ASP) und ASP.NET übernimmt ASP.NET standardmäßig nicht mehr die Identität des authentifizierten Benutzers. Um den Identitätswechsel zu aktivieren, müssen Sie das Impersonate-Attribut des Identitätsabschnitts in der Web.config-Datei auf true festlegen.

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

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

IIS verwaltet sicherheitsbezogene Konfigurationseinstellungen in der IIS-Metabasis. ASP.NET behält jedoch sicherheitsrelevante (und andere) Konfigurationseinstellungen in XML-Konfigurationsdateien (Extensible Markup Language) bei. Obwohl dies im Allgemeinen 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 ihre Konfigurationsdatei (Web.config).

Die folgenden Konfigurationsabschnitte beziehen sich auf ASP.NET Sicherheit:

Authentifizierung

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

ASP.NET bietet vier Authentifizierungsanbieter:

Formularbasierte Authentifizierung

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 anmeldet und das Formular übermittelt hat, authentifiziert die Anwendung die Anforderung, und das System stellt ein Autorisierungsticket in Form eines Cookies aus. Dieses Cookie enthält die Anmeldeinformationen oder einen Schlüssel zum erneuten Abrufen der Identität. Nachfolgende Anforderungen des Browsers enthalten automatisch das Cookie.

Weitere Informationen zur Formularauthentifizierung finden Sie unter Der Formularauthentifizierungsanbieter.

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

Windows-Authentifizierung

In Windows-Authentifizierung führt IIS die Authentifizierung durch, und das authentifizierte Token wird an den ASP.NET-Arbeitsprozess weitergeleitet. Der Vorteil der Verwendung von Windows-Authentifizierung besteht darin, dass eine minimale Codierung erforderlich ist. Möglicherweise möchten Sie Windows-Authentifizierung verwenden, um die Identität des Windows-Benutzerkontos anzugeben, das IIS authentifiziert, bevor Sie die Anforderung an ASP.NET übergeben.

Weitere Informationen zu Windows-Authentifizierung finden Sie unter Der WindowsAuthenticationModule-Anbieter.

Passport-Authentifizierung

Die Passport-Authentifizierung ist ein zentralisierter Authentifizierungsdienst, den Microsoft bereitstellt und der eine einmalige Anmeldung und kernige Profildienste für Mitgliedswebsites bietet. In der Regel wird die Passport-Authentifizierung verwendet, wenn Sie einmaliges Anmelden über mehrere Domänen hinweg benötigen.

Weitere Informationen zur Passport-Authentifizierung finden Sie unter Der Passport-Authentifizierungsanbieter.

Standardauthentifizierung

Die Standardauthentifizierung wird verwendet, wenn Sie keine Sicherheit für Ihre Webanwendung wünschen. Für diesen Sicherheitsanbieter ist anonymer Zugriff 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.

Authorization

Bei der Autorisierung wird ü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. FileAuthorizationModuleist für die Durchführung von Überprüfungen unter Windows Access Control Listen (ACLs) verantwortlich, um zu bestimmen, ob ein Benutzer Zugriff haben soll.

URL-Autorisierung

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

UrlAuthorizationModule implementiert sowohl positive als auch negative Autorisierungsassertionen; Das heißt, Sie können das Modul verwenden, um den Zugriff auf beliebige Teile des URI-Namespaces für Benutzer, Rollen (z. B. Manager, 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 Microsoft COM+ und Microsoft Transaction Server (MTS) verwenden, 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. Dies muss programmgesteuert erfolgen. Um dem authentifizierten Benutzer Rollen zuzuweisen, verwenden Sie das OnAuthenticate -Ereignis des Authentifizierungsmoduls (bei dem es sich in diesem Beispiel um das Formularauthentifizierungsmodul handelt), um ein neues GenericPrincipal -Objekt zu erstellen und es der User-Eigenschaft des HttpContextzuzuweisen. Der folgende Code veranschaulicht dies:

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 einzuschränken, verwenden Sie den folgenden Code (oder einen ähnlichen) 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

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

ASP.NET Newsgroup

Weitere Informationen finden Sie in den folgenden Artikeln oder Büchern: