Grundlagen zu Benutzeroperationen in .NET Framework (Visual Basic)
.NET Framework bietet im System.Security.Principal-Namespace eine rollenbasierte Sicherheitsimplementierung, 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 wie von der IIdentity-Schnittstelle gefordert: 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 des Benutzers, indem die folgenden Member wie von der IPrincipal-Schnittstelle gefordert verfügbar gemacht wird: Die IsInRole-Methode, die eine Autorisierung ausführt, und die Identity-Eigenschaft, die den Zugriff auf das Identitätsobjekt des Benutzers bereitstellt.
Arbeiten mit Identitäten
.NET Frameworkenthält vier Klassen, mit denen die IIdentity-Schnittstelle implementiert wird:
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 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 (Visual Basic).
Arbeiten mit Prinzipalen
.NET Framework verfügt über die IPrincipal-Schnittstelle zur Verknüpfung von Benutzerrollen und -identitäten. 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 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.
Tipp
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 wird mit der CurrentPrincipal-Eigenschaft die User-Eigenschaft aktualisiert.
Weitere Informationen über das Erstellen eigener IPrincipal-Typen finden Sie unter Exemplarische Vorgehensweise: Implementieren von benutzerdefinierter Authentifizierung und Autorisierung (Visual Basic).
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 bei diesen Vorgängen Sicherheitsberechtigungen für den Codezugriff erforderlich sind. Gewähren Sie Anwendungen, die diese Objekte bearbeiten müssen, die SecurityPermissionAttribute.ControlPrincipal-Berechtigung über das Caspol.exe (Richtlinientool für die Codezugriffssicherheit).
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
Referenz
Weitere Ressourcen
Authentifizierung und Autorisierung in .NET Framework mit Visual Basic