ASP.NET-Sicherheit (Übersicht)
Dieser Artikel enthält eine Einführung in die ASP.NET-Sicherheit und bezieht sich auf die folgenden Microsoft .NET Framework Namespaces der Klassenbibliothek:
System.Web.Security
System.Web.Principal
Original Version des Produkts: 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 Security arbeitet in Verbindung mit Internet Information Services (IIS) Sicherheit und umfasst Authentifizierungs-und Autorisierungsdienste zur Implementierung des ASP.NET-Sicherheitsmodells. ASP.NET enthält auch ein rollenbasiertes Sicherheitsfeature, das Sie für Windows-und nicht-Windows-Benutzerkonten implementieren können.
Dieser Artikel gliedert sich in die folgenden Abschnitte:
- Sicherheits Fluss mit einer Anforderung
- Verwandte Konfigurationseinstellungen
- Authentifizierung
- Authorization
- Rollenbasierte Sicherheit
Sicherheits Fluss mit einer Anforderung
Die folgenden Schritte beschreiben die Abfolge der Ereignisse, wenn ein Client eine Anforderung abgibt:
- 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 die Identität eines Benutzers für den Thread, der die Anforderung verarbeitet, festgelegt werden soll. In einem deutlichen Unterschied zwischen Active Server Pages (ASP) und ASP.net wird der authentifizierte Benutzer von ASP.net nicht mehr standardmäßig imitiert. Um den Identitätswechsel zu aktivieren, müssen Sie das impersonate-Attribut des Identity-Abschnitts in der Web.config Datei auf true festlegen.
Weitere Informationen zum Sicherheits Fluss finden Sie unter ASP.NET-Datenfluss.
Weitere Informationen zum Identitätswechsel in ASP.net finden Sie unter How to implement impersonament in an ASP.NET Application.
Verwandte Konfigurationseinstellungen
IIS verwaltet sicherheitsrelevante Konfigurationseinstellungen in der IIS-Metabasis. ASP.NET verwaltet jedoch Sicherheitseinstellungen (und andere) in XML-Konfigurationsdateien (Extensible Markup Language). Obwohl dies im Allgemeinen die Bereitstellung Ihrer Anwendung aus Sicherheitsgründen vereinfacht, erfordert das Sicherheitsmodell, das Ihre Anwendung einnimmt, die ordnungsgemäße Konfiguration sowohl der IIS-Metabasis als auch der ASP.NET-Anwendung über die Konfigurationsdatei (Web.config).
Die folgenden Konfigurationsabschnitte beziehen sich auf die ASP.NET-Sicherheit:
Authentifizierung
Authentifizierung ist der Vorgang, bei dem Sie Identifikations Anmeldeinformationen wie den Namen und das Kennwort des Benutzers abrufen und diese Anmeldeinformationen anhand einer bestimmten Autorität überprüfen.
ASP.net bietet vier Authentifizierungsanbieter:
- Formularbasierte Authentifizierung
- Windows-Authentifizierung
- Passport-Authentifizierung
- Standardauthentifizierung
Formularbasierte Authentifizierung
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 Benutzeranmeldeinformationen bereitgestellt und das Formular übermittelt hat, wird die Anforderung von der Anwendung authentifiziert, und das System gibt ein Autorisierungs Ticket in Form eines Cookies aus. Dieses Cookie enthält die Anmeldeinformationen oder einen Schlüssel zum erneuten Abrufen der Identität. 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 Vorgehensweise implementieren der formularbasierten Authentifizierung in Ihrer ASP.NET-Anwendung mithilfe von C# .net.
Windows-Authentifizierung
In der Windows-Authentifizierung führt IIS die Authentifizierung aus, und das authentifizierte Token wird an den ASP.NET-Arbeitsprozess weitergeleitet. Der Vorteil der Verwendung der Windows-Authentifizierung besteht darin, dass minimale Codierung erforderlich ist. Möglicherweise möchten Sie die Windows-Authentifizierung verwenden, um das Windows-Benutzerkonto zu imitieren, das von IIS authentifiziert wird, bevor Sie die Anforderung an ASP.net übergeben.
Weitere Informationen zur Windows-Authentifizierung finden Sie unter WindowsAuthenticationModule-Anbieter.
Passport-Authentifizierung
Die Passport-Authentifizierung ist ein zentralisierter Authentifizierungsdienst, der von Microsoft bereitgestellt wird und der eine einmalige Anmeldung und zentrale Profildienste für Mitglieds Websites anbietet. Normalerweise wird die Passport-Authentifizierung verwendet, wenn Sie die Funktion für einmaliges Anmelden über mehrere Domänen hinweg benötigen.
Weitere Informationen zur Passport-Authentifizierung finden Sie unter Passport Authentication Provider.
Standardauthentifizierung
Die Standardauthentifizierung wird verwendet, wenn Sie keine Sicherheit für Ihre Webanwendung wünschen. für diesen Sicherheitsanbieter ist ein anonymer Zugriff erforderlich. Bei allen Authentifizierungsanbietern bietet die Standardauthentifizierung eine maximale Leistung für Ihre Anwendung. Dieser Authentifizierungsanbieter wird auch verwendet, wenn Sie ein eigenes benutzerdefiniertes Sicherheitsmodul verwenden.
Authorization
Autorisierung ist der Prozess, der überprüft, ob der authentifizierte Benutzer Zugriff auf die angeforderten Ressourcen hat.
ASP.net bietet die folgenden Autorisierungsanbieter:
Dateiautorisierung
Die FileAuthorizationModule
Klasse führt eine Dateiautorisierung durch und ist aktiv, wenn Sie die Windows-Authentifizierung verwenden. FileAuthorizationModule
ist für die Durchführung von Prüfungen in Windows-Zugriffssteuerungslisten (ACLs) zuständig, um zu ermitteln, ob ein Benutzer Zugriff haben soll.
URL-Autorisierung
Die UrlAuthorizationModule
-Klasse führt eine URL-Autorisierung (Uniform Resource Locator) durch, die die Autorisierung basierend auf dem URI-Namespace (Uniform Resource Identifier) steuert. URI-Namespaces können sich von dem physikalischen Ordner und den Dateipfaden unterscheiden, die von NTFS-Berechtigungen verwendet werden.
UrlAuthorizationModule
implementiert sowohl positive als auch negative Autorisierungs Assertionen; Das heißt, Sie können das Modul verwenden, um den Zugriff auf beliebige Teile des URI-Namespaces für Benutzer, Rollen (wie Manager, Tester und Administratoren) und Verben (beispielsweise und) selektiv zuzulassen oder zu verweigern GET
POST
.
Weitere Informationen zur Autorisierung in ASP.net finden Sie unter ASP.net Authorization.
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 limitiert. Wenn beispielsweise die Windows-Authentifizierung und der Identitätswechsel aktiviert sind, handelt es sich bei der Identität des Benutzers um 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 dementsprechend 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 Benutzerrollen zuzuweisen, verwenden Sie das OnAuthenticate
-Ereignis des Authentifizierungsmoduls (das Formular Authentifizierungsmodul in diesem Beispiel), um ein neues Objekt zu erstellen GenericPrincipal
und es der User-Eigenschaft des-Objekts zuzuweisen 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änken, verwenden Sie den folgenden Code (oder ähnliches) 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 Role-Based Security.
Informationsquellen
Weitere allgemeine Informationen zu ASP.net finden Sie in der folgenden Newsgroup:
Weitere Informationen finden Sie im folgenden Artikel oder in den Büchern:
PRB: Request. ASP ("LOGON_USER") gibt leere Zeichenfolge in ASP.net
Reilly, Douglas J. Entwerfen von Microsoft ASP.NET Anwendungen. Microsoft Press, 2001.
Esposito, Dino. Erstellen von Weblösungen mit ASP.net und ADO.net. Microsoft Press, 2001.