Huvudobjekt och identitetsobjekt
Kommentar
Den här artikeln gäller för Windows.
Information om ASP.NET Core finns i ASP.NET Core Security.
Hanterad kod kan identifiera identiteten eller rollen för ett huvudnamn via ett IPrincipal objekt, som innehåller en referens till ett IIdentity objekt. Det kan vara bra att jämföra identitets- och huvudobjekt med välbekanta begrepp som användar- och gruppkonton. I de flesta nätverksmiljöer representerar användarkonton personer eller program, medan gruppkonton representerar vissa kategorier av användare och de rättigheter de har. På samma sätt representerar .NET-identitetsobjekt användare, medan roller representerar medlemskap och säkerhetskontexter. I .NET kapslar huvudobjektet in både ett identitetsobjekt och en roll. .NET-program beviljar behörighet till huvudkontot baserat på dess identitet eller, vanligare, dess rollmedlemskap.
Identitetsobjekt
Identitetsobjektet kapslar in information om användaren eller entiteten som verifieras. På den mest grundläggande nivån innehåller identitetsobjekt ett namn och en autentiseringstyp. Namnet kan antingen vara en användares namn eller namnet på ett Windows-konto, medan autentiseringstypen antingen kan vara ett inloggningsprotokoll som stöds, till exempel Kerberos V5 eller ett anpassat värde. .NET definierar ett GenericIdentity objekt som kan användas för de flesta anpassade inloggningsscenarier och ett mer specialiserat WindowsIdentity objekt som kan användas när du vill att programmet ska förlita sig på Windows-autentisering. Dessutom kan du definiera din egen identitetsklass som kapslar in anpassad användarinformation.
Gränssnittet IIdentity definierar egenskaper för åtkomst till ett namn och en autentiseringstyp, till exempel Kerberos V5 eller NTLM. Alla identitetsklasser implementerar identitetsgränssnittet. Det finns ingen nödvändig relation mellan ett identitetsobjekt och Windows-processtoken under vilken en tråd körs för närvarande. Men om identitetsobjektetär ett WindowsIdentity-objekt antas identiteten representera en Windows-säkerhetstoken.
Huvudobjekt
Huvudobjektet representerar säkerhetskontexten under vilken kod körs. Program som implementerar rollbaserade behörigheter för säkerhetsbeviljande baserat på den roll som är associerad med ett huvudobjekt. På samma sätt som med identitetsobjekt tillhandahåller .NET ett GenericPrincipal objekt och ett WindowsPrincipal objekt. Du kan också definiera dina egna anpassade huvudnamnsklasser.
Gränssnittet IPrincipal definierar en egenskap för åtkomst till ett associerat identitetsobjekt samt en metod för att avgöra om användaren som identifieras av objektet Principal är medlem i en viss roll. Alla huvudklasser implementerar IPrincipal-gränssnittet samt eventuella ytterligare egenskaper och metoder som behövs. Till exempel tillhandahåller common language runtime klassen WindowsPrincipal , som implementerar ytterligare funktioner för att mappa gruppmedlemskap till roller.
Ett huvudobjekt är bundet till ett anropskontextobjekt (CallContext) i en programdomän (AppDomain). En standardanropskontext skapas alltid med varje ny AppDomain, så det finns alltid en samtalskontext tillgänglig för att acceptera objektet Principal . När en ny tråd skapas skapas även ett CallContext-objekt för tråden. Huvudobjektreferensen kopieras automatiskt från den skapande tråden till den nya trådens CallContext. Om körningen inte kan avgöra vilket huvudobjekt som tillhör skaparen av tråden följer den standardprincipen för att skapa huvudobjektet och identitetsobjektet.
En konfigurerbar programdomänspecifik princip definierar reglerna för att bestämma vilken typ av huvudobjekt som ska associeras med en ny programdomän. När säkerhetsprincipen tillåter kan körningen skapa huvudobjekt och identitetsobjekt som återspeglar den operativsystemtoken som är associerad med den aktuella körningstråden. Som standard använder körningen huvudobjekt och identitetsobjekt som representerar oautentiserade användare. Körningen skapar inte dessa standardobjekt för huvudnamn och identitet förrän koden försöker komma åt dem.
Betrodd kod som skapar en programdomän kan ange den programdomänprincip som styr konstruktionen av standardobjekten Principal och Identity . Den här programdomänspecifika principen gäller för alla körningstrådar i programdomänen. En ohanterad, betrodd värd har i sig möjlighet att ange den här principen, men hanterad kod som anger den här principen måste ha för att kontrollera domänprincipen System.Security.Permissions.SecurityPermission .
När du skickar ett huvudobjekt mellan programdomäner men inom samma process (och därför på samma dator) kopierar fjärrkommunikationsinfrastrukturen en referens till huvudobjektetsom är associerat med anroparens kontext till anroparens kontext.