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
- Zugehörige Konfigurationseinstellungen
- Authentifizierung
- Autorisierung
- Rollenbasierte Sicherheit
Sicherheitsfluss mit einer Anforderung
In den folgenden Schritten wird die Abfolge von Ereignissen beschrieben, wenn ein Client eine Anforderung sendet:
- Ein Client fordert eine .aspx Seite an, die sich auf einem IIS-Server befindet.
- Die Anmeldeinformationen des Clients werden an IIS übergeben.
- IIS authentifiziert den Client und leitet das authentifizierte Token zusammen mit der Anforderung des Clients an den ASP.NET Arbeitsprozess weiter.
- 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.
Zugehörige Konfigurationseinstellungen
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
- Windows-Authentifizierung
- Passport-Authentifizierung
- Standardauthentifizierung
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:
Weitere Informationen finden Sie im folgenden Artikel oder in büchern:
PRB: Request.ServerVariables("LOGON_USER") Gibt leere Zeichenfolge in ASP.NET
Reilly, Douglas J. Designing Microsoft ASP.NET Applications. Microsoft Press, 2001.
Esposito, Dino. Erstellen von Weblösungen mit ASP.NET und ADO.NET. Microsoft Press, 2001.