Claims en autorisatie beheren met het identiteitsmodel
Autorisatie is het proces om te bepalen welke entiteiten gemachtigd zijn om een computerresource te wijzigen, weer te geven of anderszins te openen. In een bedrijf kunnen bijvoorbeeld alleen managers toegang krijgen tot de bestanden van hun werknemers. Windows Communication Foundation (WCF) ondersteunt twee mechanismen voor het uitvoeren van autorisatieverwerking. Met het eerste mechanisme kunt u autorisatie beheren met behulp van bestaande CLR-constructies (Common Language Runtime). De tweede is een op claims gebaseerd model dat bekend staat als het identiteitsmodel. WCF maakt gebruik van het identiteitsmodel om claims te maken op basis van binnenkomende berichten; Identiteitsmodelklassen kunnen worden uitgebreid ter ondersteuning van nieuwe claimtypen voor aangepaste autorisatieschema's. In dit onderwerp vindt u een overzicht van de belangrijkste programmeerconcepten van de functie Identity Model, evenals een overzicht van de belangrijkste klassen die door de functie worden gebruikt.
Scenario's voor identiteitsmodellen
De volgende scenario's vertegenwoordigen het gebruik van identiteitsmodellen.
Scenario 1: Ondersteunende identiteit, rol en groepsclaims
Gebruikers verzenden berichten naar een webservice. De vereisten voor toegangsbeheer van de webservice maken gebruik van identiteit, rollen of groepen. De afzender van het bericht wordt toegewezen aan een set rollen of groepen. Informatie over rollen of groepen wordt gebruikt om toegangscontroles uit te voeren.
Scenario 2: Ondersteuning voor uitgebreide claims
Gebruikers verzenden berichten naar een webservice. De vereisten voor toegangsbeheer van de webservice vereisen een uitgebreider model dan identiteit, rollen of groepen. De webservice bepaalt of een bepaalde gebruiker toegang heeft tot een bepaalde beveiligde resource met behulp van het uitgebreide model op basis van claims. Eén gebruiker kan bijvoorbeeld bepaalde informatie lezen, zoals salarisgegevens, waartoe andere gebruikers geen toegang hebben.
Scenario 3: Verschillende claims toewijzen
Een gebruiker verzendt een bericht naar een webservice. De gebruiker kan op verschillende manieren referenties opgeven: X.509-certificaat, token voor gebruikersnaam of Kerberos-token. De webservice is vereist om op dezelfde manier toegangsbeheercontroles uit te voeren, ongeacht het type gebruikersreferentie. Als er na verloop van tijd aanvullende referentietypen worden ondersteund, moet het systeem zich dienovereenkomstig ontwikkelen.
Scenario 4: Toegang tot meerdere resources bepalen
Een webservice probeert toegang te krijgen tot meerdere resources. De service bepaalt tot welke beveiligde resources een bepaalde gebruiker toegang heeft door de claims te vergelijken die zijn gekoppeld aan de gebruiker met de claims die nodig zijn voor toegang tot de resource.
Termen voor identiteitsmodel
In de volgende lijst worden de belangrijkste termen gedefinieerd die worden gebruikt om identiteitsmodelconcepten te beschrijven.
Autorisatiebeleid
Een set regels voor het toewijzen van een set invoerclaims aan een set uitvoerclaims. Het evalueren van autorisatiebeleid resulteert in claimsets die worden toegevoegd aan een evaluatiecontext en vervolgens een autorisatiecontext.
Autorisatiecontext
Een set claimsets en nul of meer eigenschappen. Het resultaat van het evalueren van een of meer autorisatiebeleidsregels.
Claim
Een combinatie van een claimtype, recht en een waarde.
Claimset
Een set claims die zijn uitgegeven door een bepaalde verlener.
Claimtype
Een soort claim. Claims die zijn gedefinieerd door de Identity Model-API zijn eigenschappen van de ClaimType klasse. Voorbeelden van door het systeem geleverde claimtypen zijnDns, , HashEmail, Name, , Rsa, SpnSid, System, Thumbprint, , Urien X500DistinguishedName.
Evaluatiecontext
Een context waarin een autorisatiebeleid wordt geëvalueerd. Bevat eigenschappen en claimsets. Wordt de basis van een autorisatiecontext zodra de evaluatie is voltooid.
Identiteitsclaim
Een claim waarvan het recht identiteit is.
Verlener
Een claimset die ten minste één identiteitsclaim bevat en wordt beschouwd als een andere claimset uitgegeven.
Eigenschappen
Een set informatie die is gekoppeld aan een evaluatiecontext of autorisatiecontext.
Beveiligde resource
Iets in het systeem dat alleen kan worden gebruikt, geopend of anderszins gemanipuleerd als aan bepaalde vereisten wordt voldaan.
Right
Een mogelijkheid voor een resource. Rechten die zijn gedefinieerd door de Identity Model-API zijn eigenschappen van de Rights klasse. Voorbeelden van door het systeem verstrekte rechten zijn Identity en PossessProperty.
Weergegeven als
Iets waarover een recht wordt geclaimd.
Claims
Het identiteitsmodel is een systeem op basis van claims. Claims beschrijven de mogelijkheden die zijn gekoppeld aan een bepaalde entiteit in het systeem, vaak een gebruiker van dat systeem. De set claims die aan een bepaalde entiteit zijn gekoppeld, kan worden beschouwd als een sleutel. De specifieke claims definiëren de vorm van die sleutel, vergelijkbaar met een fysieke sleutel die wordt gebruikt om een slot in een deur te openen. Claims worden gebruikt om toegang te krijgen tot resources. Toegang tot een bepaalde beveiligde resource wordt bepaald door de claims te vergelijken die nodig zijn voor toegang tot die resource met de claims die zijn gekoppeld aan de entiteit die toegang probeert te krijgen.
Een claim is de uitdrukking van een recht met betrekking tot een bepaalde waarde. Een recht kan bijvoorbeeld 'Lezen', 'Schrijven' of 'Uitvoeren' zijn. Een waarde kan een database, een bestand, een postvak of een eigenschap zijn. Claims hebben ook een claimtype. De combinatie van claimtype en recht biedt het mechanisme voor het opgeven van mogelijkheden met betrekking tot de waarde. Een claim van het type 'Bestand', met rechts 'Lezen' boven de waarde 'Biography.doc', geeft aan dat de entiteit waarmee een dergelijke claim is gekoppeld leestoegang heeft tot het bestand Biography.doc. Een claim van het type "Name", met rechts "PossessProperty" boven de waarde "Martin", geeft aan dat de entiteit waarmee een dergelijke claim is gekoppeld, een naameigenschap bezit met de waarde "Martin".
Hoewel verschillende claimtypen en -rechten worden gedefinieerd als onderdeel van het identiteitsmodel, is het systeem uitbreidbaar, waardoor de verschillende systemen, die op de infrastructuur van het identiteitsmodel worden gebouwd, extra claimtypen en rechten kunnen definiëren zoals vereist.
Identiteitsclaims
Een bepaald recht is dat van identiteit. Claims die over dit recht beschikken, maken een verklaring over de identiteit van de entiteit. Een claim van het type User Principal Name (UPN) met een waarde van someone@example.com
en een recht van Identity
geeft bijvoorbeeld een bepaalde identiteit in een bepaald domein aan.
Systeemidentiteitsclaim
Het identiteitsmodel definieert één identiteitsclaim: System
. De System
identiteitsclaim geeft aan dat een entiteit de huidige toepassing of het huidige systeem is.
Sets of Claims
Het model van claims die identiteit vertegenwoordigen is belangrijk omdat claims altijd worden uitgegeven door een bepaalde entiteit in het systeem, zelfs als die entiteit uiteindelijk een concept van 'self' is. Claims worden gegroepeerd als een set en elke set heeft een verlener. Een verlener is slechts een set claims. Een dergelijke recursieve relatie moet uiteindelijk eindigen en elke claimset kan een eigen uitgever zijn.
In de volgende afbeelding ziet u een voorbeeld van drie sets claims waarbij één set claims, als uitgever, een andere set claims heeft, die op zijn beurt de systeemclaim als verlener heeft ingesteld. Daarom vormen sets claims een hiërarchie die willekeurig diep kan zijn.
Meerdere sets claims kunnen dezelfde uitgevende claimset hebben, zoals wordt geïllustreerd in de volgende afbeelding:
Met uitzondering van een claimset die een eigen verlener is, biedt het identiteitsmodel geen ondersteuning voor claimsets om een lus te vormen. Een situatie waarin claimset A wordt uitgegeven door claimset B, dat zelf wordt uitgegeven door claimset A, kan nooit ontstaan. Het identiteitsmodel biedt ook geen ondersteuning voor claimsets om meerdere verleners te hebben. Als twee of meer verleners een bepaalde set claims moeten uitgeven, moet u meerdere claimsets gebruiken, die elk dezelfde claims bevatten, maar verschillende verleners hebben.
De oorsprong van claims
Claims kunnen afkomstig zijn van verschillende bronnen. Een veelvoorkomende bron van claims is referenties die door een gebruiker worden gepresenteerd, bijvoorbeeld als onderdeel van een bericht dat naar een webservice wordt verzonden. Het systeem valideert dergelijke claims en maakt deel uit van een set claims die aan de gebruiker zijn gekoppeld. Andere systeemonderdelen kunnen ook bronnen van claims zijn, waaronder, maar niet beperkt tot, het besturingssysteem, de netwerkstack, de runtime-omgeving of de toepassing. Daarnaast kunnen externe services ook een bron van claims zijn.
Autorisatiebeleid
In het identiteitsmodel worden claims gegenereerd als onderdeel van het proces voor het evalueren van het autorisatiebeleid. Een autorisatiebeleid onderzoekt de (mogelijk lege) set bestaande claims en kan ervoor kiezen om extra claims toe te voegen op basis van de claims die al aanwezig zijn en aanvullende informatie ter beschikking. Dit biedt de basis van toewijzing tussen claims. De aanwezigheid of afwezigheid van claims in het systeem beïnvloedt het gedrag van een autorisatiebeleid met betrekking tot het toevoegen van extra claims.
Het autorisatiebeleid heeft bijvoorbeeld toegang tot een database met de geboortedatums van de verschillende entiteiten die het systeem gebruiken. Het autorisatiebeleid gebruikt die informatie om een 'Over18'-claim toe te voegen aan de context. Houd er rekening mee dat deze Claim Over18 geen informatie openbaar maakt over de andere entiteit dan het feit dat deze ouder is dan 18 jaar. Houd er rekening mee dat de interpretatie van de claim 'Over18' afhankelijk is van het begrijpen van de semantiek van die claim. Het autorisatiebeleid dat de claim heeft toegevoegd, begrijpt deze semantiek op een bepaald niveau. Code die vervolgens de claims onderzoekt die het gevolg zijn van beleidsevaluatie, worden ook op de hoogte gebracht van deze semantiek.
Een bepaald autorisatiebeleid kan vereisen dat het meerdere keren wordt geëvalueerd, omdat, zoals andere autorisatiebeleidsregels claims toevoegen, het autorisatiebeleid mogelijk nog meer claims toevoegt. Identity Model is ontworpen om de evaluatie voort te zetten totdat er geen claims meer worden toegevoegd aan de context door een van de autorisatiebeleidsregels die van kracht zijn. Deze voortdurende evaluatie van autorisatiebeleid voorkomt de vereiste om een specifieke evaluatievolgorde af te dwingen met betrekking tot autorisatiebeleid; ze kunnen in elke volgorde worden geëvalueerd. Als beleid X bijvoorbeeld alleen Claim Z toevoegt als beleid A Claim B heeft toegevoegd, wordt eerst de Claim Z niet toegevoegd als X wordt geëvalueerd. Vervolgens wordt A geëvalueerd en wordt Claim B. X vervolgens een tweede keer geëvalueerd en wordt deze keer Claim Z toegevoegd.
Een bepaald systeem kan veel autorisatiebeleidsregels hebben.
Een sleutelmachine
Het evalueren van een groep gekoppelde autorisatiebeleidsregels lijkt op het gebruik van een computer die sleutels maakt. Het autorisatiebeleid wordt elk geëvalueerd en er worden sets claims gegenereerd, waarmee de vorm van de sleutel wordt opgebouwd. Zodra de vorm van de sleutel is voltooid, kan deze worden gebruikt om een aantal vergrendelingen te openen. De vorm van de sleutel wordt opgeslagen in een 'autorisatiecontext', die wordt gemaakt door een autorisatiebeheerder.
Autorisatiecontext
Een autorisatiebeheerder evalueert de verschillende autorisatiebeleidsregels zoals beschreven en het resultaat is een autorisatiecontext (een set claimsets en enkele bijbehorende eigenschappen). De autorisatiecontext kan worden onderzocht om te bepalen welke claims in die context aanwezig zijn, de relaties tussen die verschillende claims (bijvoorbeeld de uitgevende claimset) en deze uiteindelijk vergelijken met bepaalde vereisten waaraan ze moeten voldoen om toegang te krijgen tot een resource.
Vergrendelingen
Als een autorisatiecontext (een set claims) een sleutel is, vormen de vereisten waaraan moet worden voldaan om toegang te verlenen tot een bepaalde beveiligde resource de vergrendeling die de sleutel moet aanpassen. Identiteitsmodel formaliseert niet hoe dergelijke vereisten worden uitgedrukt, maar wel, gezien de claimgebaseerde aard van het systeem, waarbij de claims in de autorisatiecontext worden vergeleken met een aantal vereiste claims.
Een samenvatting
Identiteitsmodel is gebaseerd op het concept van claims. Claims worden gegroepeerd in sets en samengevoegd in een autorisatiecontext. Een autorisatiecontext bevat een set claims en is het resultaat van het evalueren van een of meer autorisatiebeleidsregels die zijn gekoppeld aan een autorisatiebeheerder. Deze claimsets kunnen worden onderzocht om te bepalen of aan de toegangsvereisten is voldaan. In de volgende afbeelding ziet u de relaties tussen deze verschillende identiteitsmodelconcepten.
WCF en identiteitsmodel
WCF gebruikt de infrastructuur van het identiteitsmodel als basis voor het uitvoeren van autorisatie. In WCF kunt u met de ServiceAuthorizationBehavior klasse autorisatiebeleid opgeven als onderdeel van een service. Dergelijke autorisatiebeleidsregels worden externe autorisatiebeleid genoemd en ze kunnen claimverwerking uitvoeren op basis van lokaal beleid of door interactie met een externe service. De autorisatiebeheerder, vertegenwoordigd door de ServiceAuthorizationManager klasse evalueert extern autorisatiebeleid samen met autorisatiebeleid dat de verschillende referentietypen (tokens) herkent en vult wat een autorisatiecontext wordt genoemd met de claims die geschikt zijn voor een binnenkomend bericht. De autorisatiecontext wordt vertegenwoordigd door de AuthorizationContext klasse.
Identity Model Programming
In de volgende tabel wordt het objectmodel beschreven dat wordt gebruikt om extensies voor identiteitsmodellen te programmeren. Deze klassen bestaan allemaal in de System.IdentityModel.Policy of de System.IdentityModel.Claims naamruimten.
Klas | Beschrijving |
---|---|
Autorisatieonderdeel | Een identiteitsmodelklasse waarmee de IAuthorizationComponent interface wordt geïmplementeerd. |
IAuthorizationComponent | Een interface die één alleen-lezen tekenreekseigenschap biedt: Id. De waarde van deze eigenschap is uniek voor elk exemplaar in het systeem dat deze interface implementeert. |
AuthorizationContext | Een autorisatieonderdeel dat een set ClaimSet exemplaren met nul of meer eigenschappen bevat; het resultaat van het evalueren van een of meer autorisatiebeleidsregels. |
Claim | Een combinatie van een claimtype, recht en waarde. De rechter- en waardeonderdelen worden beperkt door het claimtype. |
ClaimSet | Een abstracte basisklasse. Een verzameling Claim exemplaren. |
DefaultClaimSet | Een verzegelde klasse. Een implementatie van de ClaimSet klasse. |
EvaluationContext | Een abstracte basisklasse. Doorgegeven aan een autorisatiebeleid tijdens de beleidsevaluatie. |
IAuthorizationPolicy | Een interface die is afgeleid van IAuthorizationComponent en geïmplementeerd door autorisatiebeleidsklassen. |
Rights | Een statische klasse die vooraf gedefinieerde juiste waarden bevat. |
De volgende klassen worden ook gebruikt voor het programmeren van identiteitsmodellen, maar zijn niet gevonden in de System.IdentityModel.Policy of System.IdentityModel.Claims naamruimten.
Klas | Beschrijving |
---|---|
ServiceAuthorizationManager | Een klasse die een methode biedt: CheckAccessCoreom op claims gebaseerde autorisatiecontroles uit te voeren voor elke bewerking in een service. U moet zijn afgeleid van de klasse en de methode overschrijven. |
ServiceAuthorizationBehavior | Een verzegelde klasse die verschillende eigenschappen biedt die betrekking hebben op het gedrag van een service, omdat deze betrekking heeft op autorisatie. |
ServiceSecurityContext | Een klasse die beveiligingscontext biedt, inclusief autorisatiecontext, voor de bewerking die momenteel wordt uitgevoerd (of die bijna moet worden uitgevoerd). Een exemplaar van deze klasse maakt deel uit van de OperationContext. |
Belangrijke leden
De volgende leden worden vaak gebruikt om nieuwe claimtypen te maken.
Lid | Beschrijving |
---|---|
CheckAccessCore | Afgeleide klassen implementeren deze methode om op claim gebaseerde toegangscontroles uit te voeren voordat bewerkingen in een service worden uitgevoerd. Alle en alle informatie in de verstrekte OperationContext, of elders, kan worden onderzocht bij het nemen van de beslissing over de toegangscontrole. Als CheckAccessCore het resultaat wordt true geretourneerd, wordt toegang verleend en mag de bewerking worden uitgevoerd. Als CheckAccessCore deze retourneert false , wordt de toegang geweigerd en wordt de bewerking niet uitgevoerd. Zie Voor een voorbeeld : Een aangepast autorisatiebeheer voor een service maken. |
ServiceAuthorizationManager | Retourneert de ServiceAuthorizationManager voor de service. De ServiceAuthorizationManager verantwoordelijkheid is voor het nemen van autorisatiebeslissingen. |
ExternalAuthorizationPolicies | De verzameling aangepaste autorisatiebeleidsregels die zijn opgegeven voor de service. Deze beleidsregels worden geëvalueerd naast de beleidsregels die zijn gekoppeld aan referenties in binnenkomende berichten. |
Zie ook
- AuthorizationContext
- Claim
- EvaluationContext
- IAuthorizationComponent
- IAuthorizationPolicy
- Rights
- System.IdentityModel.Claims
- System.IdentityModel.Policy
- System.IdentityModel.Tokens
- System.IdentityModel.Selectors
- Claims en tokens
- Claims en toegang tot resources weigeren
- Claim maken en resourcewaarden
- Procedure: Een aangepaste claim maken
- Procedure: Claims vergelijken
- Procedure: Een aangepast autorisatiebeleid maken
- Procedure: Een aangepast autorisatiebeheer maken voor een service
- Beveiligingsoverzicht
- Autorisatie