Delen via


Autorisatie in claimbewuste webtoepassingen en -services

Bijgewerkt: 19 juni 2015

Van toepassing op: Azure

Van toepassing op

  • Microsoft Azure Active Directory Access Control (ook wel bekend als Access Control Service of ACS)

  • ® Windows Identity Foundation (WIF)

  • ASP.NET

  • Windows Communication Foundation (WCF)

Samenvatting

In een relying party-toepassing bepaalt autorisatie welke resources een geverifieerde identiteit mag openen en welke bewerkingen mogen worden uitgevoerd op deze resources. Onjuiste of zwakke autorisatie leidt tot openbaarmaking van informatie en manipulatie van gegevens. In dit onderwerp vindt u een overzicht van de beschikbare benaderingen voor het implementeren van autorisatie voor claimbewuste ASP.NET webtoepassingen en -services met behulp van ACS en WIF.

Doelen

  • Vermeld de autorisatiemethoden die gebruikmaken van claims.

  • Een overzicht geven van het ontwerp op hoog niveau voor elke benadering.

  • Noem de voor- en nadelen van elke benadering.

Overzicht

Sinds de eerste versie biedt de .NET Framework een flexibel mechanisme voor het implementeren van autorisatie. Dit mechanisme is gebaseerd op twee eenvoudige interfaces: IPrincipal en IIentity. Concrete implementaties van IIentity vertegenwoordigen een geverifieerde gebruiker. De Implementatie van WindowsIdentity vertegenwoordigt bijvoorbeeld een gebruiker die wordt geverifieerd door Active Directory en GenericIdentity vertegenwoordigt een gebruiker die wordt geverifieerd door een aangepaste verificatie. Concrete implementaties van IPrincipal helpen bij het controleren van machtigingen met behulp van rollen, afhankelijk van het rollenarchief. WindowsPrincipal controleert bijvoorbeeld WindowsIdentity op lidmaatschap van Active Directory-groepen. Deze controle wordt uitgevoerd door de Methode IsInRole aan te roepen op de IPrincipal-interface . Toegang controleren op basis van rollen wordt Role-Based Access Control (RBAC) genoemd. RBAC wordt uitgelegd in de sectie Op rollen gebaseerde Access Control van dit onderwerp. Claims kunnen worden gebruikt om informatie over rollen te bevatten ter ondersteuning van vertrouwde, op rollen gebaseerde autorisatiemechanismen.

Claims kunnen ook worden gebruikt om veel uitgebreidere autorisatiebeslissingen mogelijk te maken buiten rollen. Claims kunnen worden gebaseerd op vrijwel alles: leeftijd, postcode, schoenmaat, enzovoort. Het controleren van de toegang op basis van willekeurige claims wordt op claims gebaseerde Access Control (CBAC) of op claims gebaseerde autorisatie genoemd. Autorisatie op basis van claims wordt uitgelegd in de sectie Op claims gebaseerde Access Control van dit onderwerp.

Autorisatiecontroles worden uitgevoerd aan de toepassingszijde, niet aan de ACS-zijde. ACS fungeert als een beveiligingstokenservice (STS) die tokens uitgeeft die de claims naar de toepassing overbrengen. De tokens worden verrijkt met claims door id-providers en optioneel door ACS zelf, met behulp van de regelengine. Wanneer de toepassing het token met claims ontvangt, kan het het token parseren, de relevante claims extraheren en autorisatiebeslissingen nemen met behulp van RBAC of een op claims gebaseerde benadering. WIF wordt gebruikt om het token te parseren en het bruikbaar te maken voor autorisatiebeslissingen via een gebruiksvriendelijke API (Application Programming Interface). Zie de WIF SDK (https://go.microsoft.com/fwlink/?LinkID=187481) voor meer informatie over WIF. Houd rekening met het volgende diagram wanneer u nadenkt over autorisatie in claimbewuste toepassingen en services. Houd er rekening mee dat bij een geslaagde verificatie door de id-provider een token (het IdP-token in het diagram) wordt gegenereerd. Het IdP-token kan worden getransformeerd door de ACS-regelengine. ACS kan de claims die in het token worden geleverd, toevoegen, verwijderen of wijzigen die de id-provider uitgeeft. Ten slotte wordt het door ACS uitgegeven token verzonden naar de toepassing en verwerkt door WIF. De toegangscontrole wordt uitgevoerd in WIF, met behulp van de RBAC- of CBAC-benadering.

ACS v2 WIF Authorization

Op rollen gebaseerd toegangsbeheer

RBAC is een autorisatiebenadering waarbij gebruikersmachtigingen worden beheerd en afgedwongen door een toepassing op basis van gebruikersrollen. Als een gebruiker een rol heeft die is vereist om een actie uit te voeren, wordt de toegang verleend; anders wordt de toegang geweigerd.

Methode IPrincipal.IsInRole

Als u de RBAC-benadering in claimbewuste toepassingen wilt implementeren, gebruikt u de methode IPrinicpal Interface IsInRole(), net zoals in niet-claimbewuste toepassingen. Er zijn verschillende manieren om de methode IsInRole() te gebruiken:

  • Expliciet aanroepen van IPrincipal.IsInRole("Administrator"). In deze benadering is het resultaat een Booleaanse waarde. Gebruik deze in uw voorwaardelijke instructies. Het kan willekeurig elke plaats in uw code worden gebruikt.

  • Gebruik de beveiligingsvraag PrincipalPermission.Demand(). In deze benadering is het resultaat een uitzondering voor het geval de vraag niet aan de vraag wordt voldaan. Dit moet passen bij uw strategie voor het afhandelen van uitzonderingen. Het genereren van uitzonderingen is veel duurder vanuit een prestatieperspectief vergeleken met het buiten gebruik stellen van Booleaanse waarde. Dit kan op elke plaats in uw code worden gebruikt.

  • Gebruik de declaratieve kenmerken [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]. Deze methode wordt declaratief genoemd, omdat deze wordt gebruikt om methoden te versieren. Het kan niet worden gebruikt in codeblokken binnen de implementaties van de methode. Het resultaat is een uitzondering voor het geval niet aan de vraag wordt voldaan. Zorg ervoor dat deze past bij uw strategie voor het afhandelen van uitzonderingen.

  • Url-autorisatie gebruiken met behulp van de <autorisatiesectie> in web.config. Deze methode is geschikt wanneer u autorisatie op URL-niveau beheert. Dit is het meest grof niveau van de eerder genoemde. Het voordeel van deze benadering is dat wijzigingen worden aangebracht in het configuratiebestand, wat betekent dat de code niet mag worden gecompileerd om te profiteren van de wijziging.

Rollen als claims uitdrukken

Wanneer de Methode IsInRole() wordt aangeroepen, wordt er een controle uitgevoerd om te zien of de huidige gebruiker die rol heeft. In claimbewuste toepassingen wordt de rol uitgedrukt door een rolclaimtype dat beschikbaar moet zijn in het token. Het type rolclaim wordt uitgedrukt met behulp van de volgende URI:

https://schemas.microsoft.com/ws/2008/06/identity/claims/role

Er zijn verschillende manieren om een token te verrijken met een rolclaimtype:

  • Met behulp van de ACS-regelengine: in dit geval maakt u een regel met behulp van de ACS-beheerportal of ACS-beheerservice om claimtransformatieregels te maken die claims van een bepaald roltype genereren. Zie Regelgroepen en regels en procedures voor het implementeren van tokentransformatielogica met behulp van regels voor meer informatie over regels en tokentransformatietransformatie.

  • Het transformeren van willekeurige claims naar claimroltype met behulp van ClaimsAuthenticationManager: De ClaimsAuthenticationManager is een onderdeel dat wordt geleverd als onderdeel van WIF. Hiermee kunnen aanvragen worden onderschept wanneer ze een toepassing starten, tokens inspecteren en transformeren door claims toe te voegen, te wijzigen of te verwijderen. Zie How to: Role Based Access Control (RBAC) implementeren in een claimbewuste ASP.NET-toepassing met WIF en ACS voor meer informatie over het gebruik van ClaimsAuthenticationManager voor het transformeren van claims

  • Willekeurige claims toewijzen aan een roltype met behulp van de configuratiesectie samlSecurityTokenRequirement: een declaratieve benadering waarbij de claimtransformatie wordt uitgevoerd met behulp van alleen de configuratie en er geen codering is vereist.

Op claims gebaseerde Access Control

CBAC is een autorisatiebenadering waarbij de autorisatiebeslissing voor het verlenen of weigeren van toegang is gebaseerd op willekeurige logica die gebruikmaakt van gegevens die beschikbaar zijn in claims om de beslissing te nemen. Zoals u zich herinnert, was in het geval van RBAC de enige gebruikte claim van het roltype. Er is een roltypeclaim gebruikt om te controleren of de gebruiker deel uitmaakt van een specifieke rol of niet. Bekijk de volgende stappen om het proces van het nemen van autorisatiebeslissingen met behulp van op claims gebaseerde autorisatiebenadering te illustreren:

  1. De toepassing ontvangt een aanvraag.

  2. De toepassing extraheert de binnenkomende claims.

  3. De toepassing geeft de claims door aan het beslissingslogicamechanisme. Het kan code in het geheugen zijn of een aanroep van een webservice, een query naar een database of een geavanceerde regelengine aanroepen.

  4. Het beslissingsmechanisme berekent het resultaat op basis van de claims.

  5. Toegang wordt verleend als het resultaat waar is en geweigerd als het onwaar is. De regel kan bijvoorbeeld zijn dat de gebruiker 21 jaar of ouder is, in Washington State woont en is geverifieerd door Windows Live ID (Microsoft-account).

ACS fungeert als een STS die tokens uitgeeft die de claims dragen. U kunt bepalen welke claims worden uitgegeven, zowel de typen claims als de waarden, met behulp van de ACS-regelengine. Zie Regelgroepen en regels en procedures voor meer informatie over de ACS-regelengine : Logica voor tokentransformatie implementeren met behulp van regels. ClaimsAuthorizationManager is essentieel voor het implementeren van CBAC in claimbewuste toepassingen. ClaimsAuthorizationManager is een onderdeel dat wordt geleverd als onderdeel van WIF. Met ClaimsAuthorizationManager kunt u binnenkomende aanvragen onderscheppen en elke logica van uw keuze implementeren om autorisatiebeslissingen te nemen op basis van de binnenkomende claims. Dit is ook een uitbreidbaarheidspunt waarbij autorisatiebeslissingen kunnen worden ge externaliseerd en losgekoppeld van de toepassingscode. Dit wordt belangrijk wanneer autorisatielogica moet worden gewijzigd. In dat geval heeft het gebruik van ClaimsAuthorizationManager geen invloed op de integriteit van de toepassing, waardoor de kans op een toepassingsfout wordt verminderd als gevolg van de wijziging. Voor meer informatie over het gebruik van ClaimsAuthorizationManager voor het implementeren van op claims gebaseerd toegangsbeheer, raadpleegt u Procedure: Claimautorisatie implementeren in een claimbewuste ASP.NET-toepassing met behulp van WIF en ACS.

Zie ook

Concepten

Scenario's en oplossingen met ACS