Principal- en identiteitsobjecten
Notitie
Dit artikel is van toepassing op Windows.
Zie ASP.NET Core Security voor meer informatie over ASP.NET Core.
Beheerde code kan de identiteit of de rol van een principal detecteren via een IPrincipal object, dat een verwijzing naar een IIdentity object bevat. Het kan handig zijn om identiteits- en principal-objecten te vergelijken met bekende concepten, zoals gebruikers- en groepsaccounts. In de meeste netwerkomgevingen vertegenwoordigen gebruikersaccounts personen of programma's, terwijl groepsaccounts bepaalde categorieën gebruikers en de rechten vertegenwoordigen die ze bezitten. Op dezelfde manier vertegenwoordigen .NET-identiteitsobjecten gebruikers, terwijl rollen lidmaatschappen en beveiligingscontexten vertegenwoordigen. In .NET bevat het principal-object zowel een identiteitsobject als een rol. .NET-toepassingen verlenen rechten aan de principal op basis van de identiteit of, vaker, het rollidmaatschap.
Identiteitsobjecten
Het identiteitsobject bevat informatie over de gebruiker of entiteit die wordt gevalideerd. Op hun meest eenvoudige niveau bevatten identiteitsobjecten een naam en een verificatietype. De naam kan de naam van een gebruiker of de naam van een Windows-account zijn, terwijl het verificatietype een ondersteund aanmeldingsprotocol kan zijn, zoals Kerberos V5 of een aangepaste waarde. .NET definieert een GenericIdentity object dat kan worden gebruikt voor de meeste aangepaste aanmeldingsscenario's en een meer gespecialiseerd WindowsIdentity object dat kan worden gebruikt wanneer u wilt dat uw toepassing afhankelijk is van Windows-verificatie. Daarnaast kunt u uw eigen identiteitsklasse definiëren waarmee aangepaste gebruikersgegevens worden ingekapseld.
De IIdentity interface definieert eigenschappen voor toegang tot een naam en een verificatietype, zoals Kerberos V5 of NTLM. Alle identiteitsklassen implementeren de IIdentity-interface . Er is geen vereiste relatie tussen een identiteitsobject en het Windows-procestoken waaronder een thread momenteel wordt uitgevoerd. Als het identiteitsobject echter een WindowsIdentity-object is, wordt ervan uitgegaan dat de identiteit een Windows-beveiligingstoken vertegenwoordigt.
Principal-objecten
Het principal-object vertegenwoordigt de beveiligingscontext waaronder code wordt uitgevoerd. Toepassingen die beveiligingsrechten op basis van rollen implementeren op basis van de rol die is gekoppeld aan een principal-object. Net als identiteitsobjecten biedt .NET een GenericPrincipal object en een WindowsPrincipal object. U kunt ook uw eigen aangepaste principalklassen definiëren.
De IPrincipal interface definieert een eigenschap voor toegang tot een gekoppeld identiteitsobject en een methode om te bepalen of de gebruiker die is geïdentificeerd door het principal-object lid is van een bepaalde rol. Alle principal-klassen implementeren de IPrincipal-interface en eventuele aanvullende eigenschappen en methoden die nodig zijn. De algemene taalruntime biedt bijvoorbeeld de WindowsPrincipal-klasse , waarmee extra functionaliteit wordt geïmplementeerd voor het toewijzen van groepslidmaatschap aan rollen.
Een principal-object is gebonden aan een aanroepcontextobject (CallContext) binnen een toepassingsdomein (AppDomain). Er wordt altijd een standaardoproepcontext gemaakt met elk nieuw AppDomain, zodat er altijd een oproepcontext beschikbaar is om het principal-object te accepteren. Wanneer er een nieuwe thread wordt gemaakt, wordt er ook een CallContext-object gemaakt voor de thread. De principal-objectverwijzing wordt automatisch gekopieerd van de makende thread naar de CallContext van de nieuwe thread. Als de runtime niet kan bepalen welk Principal-object deel uitmaakt van de maker van de thread, volgt dit het standaardbeleid voorhet maken van principal- en identiteitsobjecten.
Een configureerbaar toepassingsdomeinspecifiek beleid definieert de regels voor het bepalen welk type Principal-object moet worden gekoppeld aan een nieuw toepassingsdomein. Als het beveiligingsbeleid toestaat, kan de runtime principal- en identiteitsobjecten maken die overeenkomen met het token van het besturingssysteem dat is gekoppeld aan de huidige thread van de uitvoering. De runtime maakt standaard gebruik van principal - en identiteitsobjecten die niet-geverifieerde gebruikers vertegenwoordigen. De runtime maakt deze standaard-principal- en identiteitsobjecten pas nadat de code toegang tot deze objecten probeert te krijgen.
Vertrouwde code waarmee een toepassingsdomein wordt gemaakt, kan het toepassingsdomeinbeleid instellen waarmee de constructie van de standaard-principal- en identiteitsobjecten wordt bepaald. Dit toepassingsdomeinspecifieke beleid is van toepassing op alle uitvoeringsthreads in dat toepassingsdomein. Een niet-beheerde, vertrouwde host heeft inherent de mogelijkheid om dit beleid in te stellen, maar beheerde code waarmee dit beleid wordt ingesteld, moet beschikken over het beleid voor het System.Security.Permissions.SecurityPermission beheren van domeinbeleid.
Bij het verzenden van een principal-object tussen toepassingsdomeinen, maar binnen hetzelfde proces (en dus op dezelfde computer), kopieert de externe infrastructuur een verwijzing naar het Principal-object dat is gekoppeld aan de context van de beller naar de context van de aanroeper.