Principal- und Identitätsobjekte

Hinweis

Dieser Artikel gilt für Windows

Informationen zu ASP.NET Core finden Sie unter ASP.NET Core-Sicherheit.

Verwalteter Code kann die Identität oder Rolle eines Prinzipals über ein IPrincipal-Objekt ermitteln, das einen Verweis auf ein IIdentity-Objekt enthält. Es kann hilfreich sein, Identity- und Principal-Objekte (Identitäts- und Prinzipalobjekte) mit vertrauten Konzepten wie Benutzer- und Gruppenkonten zu vergleichen. In den meisten Netzwerkumgebungen entsprechen Benutzerkonten Personen oder Programmen und Gruppenkonten bestimmten Kategorien von Benutzern sowie den Rechten, die diese haben. Ähnlich entsprechen Identitätsobjekte in .NET Benutzern, während Rollen Mitgliedschaften und Sicherheitskontexten entsprechen. In .NET kapselt das Prinzipalobjekt sowohl ein Identitätsobjekt als auch eine Rolle. .NET-Anwendungen gewähren dem Prinzipal gemäß seiner Identität oder, dies ist häufiger der Fall, gemäß seiner Rolle bestimmte Rechte.

Identitätsobjekte

Ein Identitätsobjekt kapselt Informationen über den zu prüfenden Benutzer bzw. die zu prüfende Entität. Identitätsobjekte enthalten in ihrer einfachsten Form einen Namen und einen Authentifizierungstyp. Der Name kann ein Benutzername oder der Name eines Windows-Kontos sein, und der Authentifizierungstyp kann entweder ein unterstütztes Anmeldeprotokoll, z. B. Kerberos V5, oder ein benutzerdefinierter Wert sein. .NET definiert ein GenericIdentity-Objekt, das für die meisten benutzerdefinierten Anmeldeszenarien verwendet werden kann, und ein spezielleres WindowsIdentity-Objekt, das verwendet werden kann, wenn Ihre Anwendung auf der Windows-Authentifizierung basieren soll. Zusätzlich können Sie eine eigene Identitätsklasse definieren, die benutzerdefinierte Benutzerinformationen kapselt.

Die IIdentity-Schnittstelle definiert Eigenschaften für den Zugriff auf einen Namen und einen Authentifizierungstyp (etwa Kerberos V5 oder NTLM). Alle Identity-Klassen implementieren die IIdentity-Schnittstelle. Es ist keine Beziehung zwischen einem Identity-Objekt und dem Windows-Prozesstoken erforderlich, unter dem ein Thread aktuell ausgeführt wird. Wenn das Identity-Objekt aber ein WindowsIdentity-Objekt ist, wird davon ausgegangen, dass die Identität ein Windows-Sicherheitstoken darstellt.

Prinzipalobjekte

Ein Prinzipalobjekt stellt den Sicherheitskontext dar, in dem der Code ausgeführt wird. Anwendungen, die rollenbasierte Sicherheit implementieren, gewähren Rechte anhand der Rolle, die einem Prinzipalobjekt zugeordnet ist. Ähnlich wie bei Identitätsobjekten stellt .NET ein GenericPrincipal-Objekt und ein WindowsPrincipal-Objekt bereit. Sie können auch benutzerdefinierte Prinzipalklassen definieren.

Die IPrincipal-Schnittstelle definiert eine Eigenschaft zum Zugreifen auf ein zugeordnetes Identity-Objekt sowie eine Methode, mit der bestimmt werden kann, ob der durch das Principal-Objekt identifizierte Benutzer zu einer bestimmten Rolle gehört. Alle Principal-Klassen implementieren die IPrincipal-Schnittstelle sowie alle zusätzlichen Eigenschaften und Methoden, die erforderlich sind. Die Common Language Runtime stellt z. B. die WindowsPrincipal-Klasse bereit, die zusätzliche Funktionen zum Zuordnen von Gruppenmitgliedschaften zu Rollen implementiert.

Ein Principal-Objekt ist an ein Aufrufkontextobjekt (CallContext) innerhalb einer Anwendungsdomäne (AppDomain) gebunden. Mit jeder neuen AppDomain wird ein Standardaufrufkontext erstellt, sodass immer ein Aufrufkontext verfügbar ist, um das Principal-Objekt zu akzeptieren. Wenn ein neuer Thread erstellt wird, wird für diesen ebenfalls ein neues CallContext-Objekt erstellt. Der Verweis auf das Principal-Objekt wird automatisch aus dem erstellenden Thread in den CallContext des neuen Threads kopiert. Wenn die Runtime nicht bestimmen kann, welches Principal-Objekt zum Ersteller des Threads gehört, wird die Standardrichtlinie für die Erstellung von Principal- und Identity-Objekten angewendet.

Eine konfigurierbare anwendungsdomänenspezifische Richtlinie definiert die Regeln, nach denen bestimmt wird, welcher Typ von Principal-Objekt einer neuen Anwendungsdomäne zuzuordnen ist. Sofern die Sicherheitsrichtlinie dies zulässt, kann die Runtime Principal-Objekte und Identity-Objekte erstellen, die das Betriebssystemtoken wiedergeben, das dem aktuellen Ausführungsthread zugeordnet ist. Standardmäßig verwendet die Runtime Principal-Objekte und Identity-Objekte, die nicht authentifizierte Benutzer darstellen. Die Runtime erstellt diese Principal- und Identity-Standardobjekte erst dann, wenn im Code versucht wird, auf diese zuzugreifen.

Vertrauenswürdiger Code, der eine Anwendungsdomäne erstellt, kann die Anwendungsdomänenrichtlinie festlegen, die das Erstellen der Principal- und Identity-Standardobjekte steuert. Diese anwendungsdomänenspezifische Richtlinie gilt für alle Ausführungsthreads in dieser Anwendungsdomäne. Ein nicht verwalteter vertrauenswürdiger Host ist automatisch berechtigt, diese Richtlinie festzulegen. Dagegen muss verwalteter Code, der diese Richtlinie festlegt, die System.Security.Permissions.SecurityPermission-Berechtigung haben, um die Domänenrichtlinie steuern zu können.

Wird ein Principal-Objekt zwischen Anwendungsdomänen, aber im selben Prozesses (und daher auf demselben Computer) übertragen, kopiert die Remoteinfrastruktur einen Verweis auf das Principal-Objekt, das dem Kontext des Aufrufers zugeordnet ist, in den Kontext des Aufgerufenen.

Weitere Informationen