Grundlagen zu Benutzeroperationen in .NET Framework

Aktualisiert: November 2007

.NET Framework bietet im System.Security.Principal-Namespace eine Implementierung für rollenbasierte Sicherheit, die Sie zum Authentifizieren und Autorisieren von Benutzern in einer Anwendung verwenden können. In diesem Thema wird erläutert, wie Sie die Anwendungsautorisierung in .NET Framework verwenden und IIdentity-Objekte sowie IPrincipal-Objekte erstellen können, die Benutzer darstellen.

Eine IIdentity kapselt einen authentifizierten Benutzer. Ein IPrincipal ist eine Kombination aus der Identität eines Benutzers und dessen Rollen. Sie können die vordefinierten Identitäts- und Prinzipalklassen im System.Security.Principal-Namespace verwenden oder Funktionen für benutzerdefinierte Authentifizierung hinzufügen, indem Sie Klassen erstellen, die diese Schnittstellen implementieren.

Beim Einsatz dieser Schnittstellen müssen Sie vollqualifizierte Namen verwenden oder am Anfang des betreffenden Codeabschnitts mit Imports-Anweisungen die relevanten Namespaces importieren. Weitere Informationen finden Sie unter Imports-Anweisung (.NET-Namespace und Typ).

Verwenden rollenbasierter Sicherheit in .NET Framework-Anwendungen

Jedem Anwendungsthread kann ein Prinzipalobjekt zugeordnet sein (verfügbar über die CurrentPrincipal-Eigenschaft), das den Sicherheitskontext des Benutzers darstellt, für den der Code ausgeführt wird. Ein Prinzipalobjekt kapselt das Benutzersicherheitskontextobjekt (oder Identitätsobjekt) eines Benutzers. Durch Verwendung von zwei Objekten können die Authentifizierung (im Identitätsobjekt) und die Autorisierung (im Prinzipal) getrennt behandelt werden.

Ein Identitätsobjekt muss die IIdentity-Schnittstelle implementieren. Ein Identitätsobjekt stellt einen bestimmten Benutzer dar und macht die folgenden Eigenschaften verfügbar, die für die IIdentity-Schnittstelle erforderlich sind: Name, IsAuthenticated und AuthenticationType. Identitätsobjekte verfügen i. d. R. über zusätzliche private Member, die die Benutzerauthentifizierung ausführen.

Ein Prinzipalobjekt muss die IPrincipal-Schnittstelle implementieren. Ein Prinzipalobjekt kapselt den Sicherheitskontext eines Benutzers, indem es die folgenden Member verfügbar macht, die für die IPrincipal-Schnittstelle erforderlich sind: die IsInRole-Methode, die die Autorisierung ausführt, und die Identity-Eigenschaft, die Zugriff auf das Identitätsobjekt des Benutzers ermöglicht.

Arbeiten mit Identitäten

.NET Framework stellt vier Klassen bereit, die die IIdentity-Schnittstelle implementieren:

Jede Klasse ermöglicht die Arbeit mit einer anderen Art von Benutzeridentität. Wenn Sie auf das aktuelle WindowsIdentity-Objekt für eine Anwendung zugreifen möchten, bei der Windows-Authentifizierung verwendet wird, verwenden Sie hierfür die statische GetCurrent-Methode der WindowsIdentity-Klasse. Sie können auch den Prinzipal des aktuellen Threads festlegen, indem Sie die My.User.InitializeWithWindowsUser-Methode aufrufen.

Darüber hinaus können Sie benutzerdefinierte Identitätsklassen erstellen, indem Sie die IIdentity-Schnittstelle in einer benutzerdefinierten Klasse implementieren. Weitere Informationen zum Erstellen von benutzerdefinierten Identitäten finden Sie unter Exemplarische Vorgehensweise: Implementieren von benutzerdefinierter Authentifizierung und Autorisierung.

Arbeiten mit Prinzipalen

.NET Framework stellt die IPrincipal-Schnittstelle bereit, mit der Benutzerrollen und Identitäten verknüpft werden können. Wenn Sie in einer Anwendung Autorisierungsvorgänge durchführen möchten, verwenden Sie ein Objekt, das IPrincipal implementiert. So stellen die WindowsIdentity-Klasse und die GenericIdentity-Klasse beispielsweise integrierte Implementierungen von IPrincipal bereit. Alternativ können Sie eigene benutzerdefinierte Principalklassen auf Grundlage von IPrincipal erstellen.

Sie können den aktuellen Thread mit einem IPrincipal-Objekt verknüpfen, indem Sie das Objekt der CurrentPrincipal-Eigenschaft des Threads oder der My.User.CurrentPrincipal-Eigenschaft zuweisen. Anschließend können Sie eine Autorisierung durchführen, indem Sie prüfen, ob der betreffende Benutzer Mitglied einer bestimmten Rolle ist. Hierzu wird die IsInRole-Methode des Principals verwendet.

Bei ASP.NET-Anwendungen werden IPrincipal-Objekte anders als bei anderen .NET Framework-Anwendungen behandelt. ASP.NET erstellt die Darstellung einer Sitzung über das zustandslose HTTP-Protokoll. Im Rahmen dieser Sitzung ist das IPrincipal-Objekt, das den Benutzer darstellt, über die User-Eigenschaft des HttpContext-Objekts für jeglichen Code verfügbar, der die Anforderung des Benutzers ausführt. Die Common Language Runtime aktualisiert den CurrentPrincipal nach dem OnAuthenticate-Ereignis der Datei Global.asax automatisch mit dem User-Wert. In ASP.NET-Anwendungen wird die User-Eigenschaft oft für Autorisierungsprüfungen verwendet.

Hinweis:

Bei einer manuellen Änderung von User wird die CurrentPrincipal-Eigenschaft automatisch für alle Threads aktualisiert, die innerhalb desselben HTTP-Kontexts ausgeführt werden. Änderungen von CurrentPrincipal wirken sich jedoch nicht auf die User-Eigenschaft aus. Stattdessen wird nur der ausgewählte Thread für den Rest der Anforderung beeinflusst.

In ASP.NET-Anwendungen aktualisiert die My.User.CurrentPrincipal-Eigenschaft die User-Eigenschaft.

Weitere Informationen über das Erstellen eigener IPrincipal-Typen finden Sie unter Exemplarische Vorgehensweise: Implementieren von benutzerdefinierter Authentifizierung und Autorisierung.

Gewähren von Berechtigungen zum Arbeiten mit IIdentity- und IPrincipal-Objekten

Gehen Sie sorgfältig beim Gewähren von Berechtigungen zum Verwenden von IIdentity-Objekten vor. Bedenken Sie, dass diese Objekte vertrauliche Informationen zu Benutzern zur Verfügung stellen. Schützen Sie das aktuelle IPrincipal-Objekt einer Anwendung vor Änderungen, da die Autorisierungsfunktionen der Anwendung vom aktuellen Principal abhängen.

In .NET Framework ist dieser Schutz gegeben, da diese Operationen über Sicherheitsberechtigungen für den Codezugriff verfügen müssen. Gewähren Sie Anwendungen, die diese Objekte bearbeiten müssen, die SecurityPermissionAttribute.ControlPrincipal-Berechtigung über das Sicherheitsrichtlinientool für den Codezugriff (Caspol.exe).

In der Standardeinstellung verfügen alle lokal installierten Anwendungen über diese Berechtigung, da sie unter dem FullTrust-Berechtigungssatz ausgeführt werden.

Für die folgenden Methoden ist die ControlPrincipal-Berechtigung erforderlich:

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Implementieren von benutzerdefinierter Authentifizierung und Autorisierung

Referenz

My.User-Objekt

Weitere Ressourcen

Authentifizierung und Autorisierung in .NET Framework mit Visual Basic