Dela via


Auktorisering i anspråksmedvetna webbprogram och -tjänster

Uppdaterad: 19 juni 2015

Gäller för: Azure

Gäller för

  • Microsoft Azure Active Directory Access Control (även kallat Access Control Service eller ACS)

  • ® Windows Identity Foundation (WIF)

  • ASP.NET

  • Windows Communication Foundation (WCF)

Sammanfattning

I ett förlitande partprogram avgör auktoriseringen vilka resurser en autentiserad identitet får åtkomst till och vilka åtgärder som tillåts utföras på dessa resurser. Felaktig eller svag auktorisering leder till avslöjande av information och manipulering av data. Det här avsnittet beskriver tillgängliga metoder för att implementera auktorisering för anspråksmedvetna ASP.NET webbprogram och -tjänster med hjälp av ACS och WIF.

Mål

  • Visa en lista över auktoriseringsmetoder som använder anspråk.

  • Beskriva designen på hög nivå för varje metod.

  • Ta upp fördelarna och nackdelarna med varje metod.

Översikt

Sedan den första versionen har .NET Framework erbjudit en flexibel mekanism för att implementera auktorisering. Den här mekanismen baseras på två enkla gränssnitt – IPrincipal och IIentity. Konkreta implementeringar av IIentity representerar en autentiserad användare. Till exempel representerar WindowsIdentity-implementeringen en användare som autentiseras av Active Directory och GenericIdentity representerar en användare som autentiseras av en anpassad autentisering. Konkreta implementeringar av IPrincipal hjälper till att kontrollera behörigheter med hjälp av roller beroende på rollarkivet. WindowsPrincipal kontrollerar till exempel WindowsIdentity för medlemskap i Active Directory-grupper. Den här kontrollen utförs genom att anropa metoden IsInRole i IPrincipal-gränssnittet . Kontroll av åtkomst baserat på roller kallas Role-Based Access Control (RBAC). RBAC förklaras i avsnittet "Rollbaserad Access Control" i det här avsnittet. Anspråk kan användas för att överföra information om roller för att stödja välbekanta, rollbaserade auktoriseringsmekanismer.

Anspråk kan också användas för att möjliggöra mycket rikare auktoriseringsbeslut utöver roller. Anspråk kan baseras på praktiskt taget vad som helst – ålder, postnummer, skostorlek och så vidare. Kontroll av åtkomst baserat på godtyckliga anspråk kallas anspråksbaserad Access Control (CBAC) eller anspråksbaserad auktorisering. Anspråksbaserad auktorisering förklaras i avsnittet "Anspråksbaserad Access Control" i det här avsnittet.

Auktoriseringskontroller utförs på programsidan, inte på ACS-sidan. ACS fungerar som en säkerhetstokentjänst (STS) som utfärdar token som bär anspråken till programmet. Token utökas med anspråk av identitetsprovidrar och eventuellt av ACS själv, med hjälp av dess regelmotor. När programmet tar emot token med anspråk kan det parsa token, extrahera relevanta anspråk och fatta auktoriseringsbeslut med antingen RBAC eller en anspråksbaserad metod. WIF används för att parsa token och göra den användbar för auktoriseringsbeslut via ett lätthanterligt programprogrammeringsgränssnitt (API). Mer information om WIF finns i WIF SDK (https://go.microsoft.com/fwlink/?LinkID=187481). Tänk på följande diagram när du tänker på auktorisering i anspråksmedvetna program och tjänster. Observera att vid lyckad autentisering genererar identitetsprovidern en token (IdP-token i diagrammet). IdP-token kan omvandlas av ACS-regelmotorn. ACS kan lägga till, ta bort eller ändra de anspråk som finns i den token som identitetsprovidern har problem med. Slutligen skickas den token som utfärdats av ACS till programmet och bearbetas av WIF. Åtkomstkontrollen utförs i WIF med hjälp av antingen RBAC- eller CBAC-metoden.

ACS v2 WIF Authorization

Rollbaserad Access Control

RBAC är en auktoriseringsmetod där användarbehörigheter hanteras och framtvingas av ett program baserat på användarroller. Om en användare har en roll som krävs för att utföra en åtgärd beviljas åtkomsten. Annars nekas åtkomst.

IPrincipal.IsInRole-metod

Om du vill implementera RBAC-metoden i anspråksmedvetna program använder du IPrinicpal-gränssnittetIsInRole() på samma sätt som i program som inte är anspråksmedvetna. Det finns flera sätt att använda metoden IsInRole( ):

  • Anropar uttryckligen IPrincipal.IsInRole("Administratör"). I den här metoden är resultatet booleskt. Använd den i dina villkorssatser. Den kan användas godtyckligt vilken plats som helst i koden.

  • Använda security demand PrincipalPermission.Demand(). I den här metoden är resultatet ett undantag om efterfrågan inte uppfylls. Detta bör passa din strategi för undantagshantering. Att generera undantag är mycket dyrare ur ett prestandaperspektiv jämfört med att dra tillbaka booleskt värde. Detta kan användas var som helst i koden.

  • Använda deklarativa attribut [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]. Den här metoden kallas deklarativ eftersom den används för att dekorera metoder. Den kan inte användas i kodblock i metodens implementeringar. Resultatet är ett undantag om efterfrågan inte uppfylls. Du bör se till att den passar din strategi för undantagshantering.

  • Använd URL-auktorisering med hjälp av auktoriseringsavsnittet<> i web.config. Den här metoden är lämplig när du hanterar auktorisering på URL-nivå. Detta är den mest grova nivån bland dem som tidigare nämnts. Fördelen med den här metoden är att ändringar görs i konfigurationsfilen, vilket innebär att koden inte ska kompileras för att dra nytta av ändringen.

Uttrycka roller som anspråk

När metoden IsInRole() anropas görs en kontroll för att se om den aktuella användaren har den rollen. I anspråksmedvetna program uttrycks rollen av en rollanspråkstyp som ska vara tillgänglig i token. Anspråkstypen för rollen uttrycks med hjälp av följande URI:

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

Det finns flera sätt att utöka en token med en rollanspråkstyp:

Anspråksbaserad Access Control

CBAC är en auktoriseringsmetod där auktoriseringsbeslutet att bevilja eller neka åtkomst baseras på godtycklig logik som använder data som är tillgängliga i anspråk för att fatta beslutet. Kom ihåg att när det gäller RBAC var det enda anspråk som användes rolltypsanspråk. Ett anspråk av rolltyp användes för att kontrollera om användaren tillhör en viss roll eller inte. För att illustrera processen med att fatta auktoriseringsbeslut med hjälp av anspråksbaserad auktoriseringsmetod bör du överväga följande steg:

  1. Programmet tar emot en begäran.

  2. Programmet extraherar inkommande anspråk.

  3. Programmet skickar anspråken till beslutslogikmekanismen. Det kan vara minnesintern kod eller ett anrop till en webbtjänst, en fråga till en databas eller så kan den anropa en avancerad regelmotor.

  4. Beslutsmekanismen beräknar resultatet baserat på anspråken.

  5. Åtkomst beviljas om resultatet är sant och nekas om det är falskt. Regeln kan till exempel vara att användaren är 21 år eller äldre, bor i Delstaten Washington och autentiserades av Windows Live ID (Microsoft-konto).

ACS fungerar som en STS som utfärdar token som bär anspråken. Du kan styra vilka anspråk som utfärdas – både typer av anspråk och värden – med hjälp av ACS-regelmotorn. Mer information om ACS-regelmotorn finns i Regelgrupper och Regler och Så här implementerar du logik för tokenomvandling med hjälp av regler. ClaimsAuthorizationManager är nyckeln till att implementera CBAC i anspråksmedvetna program. ClaimsAuthorizationManager är en komponent som levereras som en del av WIF. Med ClaimsAuthorizationManager kan du fånga upp inkommande begäranden och implementera valfri logik för att fatta auktoriseringsbeslut baserat på inkommande anspråk. Detta är också en utökningspunkt där auktoriseringsbeslut kan externaliseras och frikopplas från programkoden. Detta blir viktigt när auktoriseringslogik behöver ändras. I så fall påverkar inte användningen av ClaimsAuthorizationManager programmets integritet, vilket minskar sannolikheten för ett programfel till följd av ändringen. Mer information om hur du använder ClaimsAuthorizationManager för att implementera anspråksbaserad åtkomstkontroll finns i Så här implementerar du anspråksauktorisering i ett anspråksmedvetet ASP.NET-program som använder WIF och ACS.

Se även

Begrepp

Scenarier och lösningar som använder ACS