Autorizace webových aplikací a služeb pracujících s deklaracemi
Aktualizováno: 19. června 2015
Platí pro: Azure
Platí pro
Microsoft Azure Active Directory Access Control (označované také jako služba Access Control nebo služba ACS)
® Windows Identity Foundation (WIF)
ASP.NET
Windows Communication Foundation (WCF)
Souhrn
V aplikaci předávající strany autorizace určuje, k jakým prostředkům má ověřená identita povolen přístup a jaké operace s těmito prostředky smí provádět. Nesprávná nebo slabá autorizace může vést k úniku informací nebo neoprávněným úpravám dat. Toto téma popisuje dostupné přístupy k implementaci autorizace pro ASP.NET webových aplikací a služeb pracujících s deklaracemi pomocí služby ACS a WIF.
Cíle
Uveďte přístupy autorizace, které používají deklarace identity.
Nastínit návrh vysoké úrovně pro každý přístup.
Vyvolejte výhody a nevýhody jednotlivých přístupů.
Přehled
Již od své první verze nabízí rozhraní .NET Framework flexibilní mechanismus pro implementaci autorizace. Tento mechanismus je založen na dvou jednoduchých rozhraních – IPrincipal a IIentity. Konkrétní implementace IIentity představují ověřeného uživatele. Například implementace WindowsIdentity představuje uživatele, který je ověřen službou Active Directory, a GenericIdentity představuje uživatele, který je ověřen vlastním ověřováním. Konkrétní implementace IPrincipal pomáhají kontrolovat oprávnění pomocí rolí v závislosti na úložišti rolí. WindowsPrincipal například kontroluje členství ve skupinách služby Active Directory ve WindowsIdentity. Tato kontrola se provádí voláním IsInRole metoda v rozhraní IPrincipal . Kontrola přístupu na základě rolí se nazývá řízení přístupu na základě rolí (RBAC). RBAC je vysvětlený v části Access Control na základě rolí v tomto tématu. Deklarace mohou přenášet informace o rolích a podporovat tak známé mechanismy ověřování na základě rolí.
Deklarace identity se dají použít také k zajištění mnohem rozsáhlejších rozhodnutí o autorizaci nad rámec rolí. Deklarace identity můžou být založené na prakticky cokoli – věku, PSČ, velikosti obuvi atd. Kontrola přístupu na základě libovolných deklarací identity se označuje jako Access Control na základě deklarací (CBAC) nebo autorizace na základě deklarací identity. Autorizace na základě deklarací identity je vysvětlená v části "Deklarace identity na základě Access Control" tohoto tématu.
Kontroly autorizace se provádějí na straně aplikace, ne na straně služby ACS. Služba tokenů zabezpečení (STS) slouží jako služba tokenů zabezpečení, která vydává tokeny, které přenášejí deklarace identity do aplikace. Tokeny jsou rozšířeny o deklarace identity zprostředkovateli identit a volitelně i vlastní službou ACS pomocí modulu pravidel. Když aplikace obdrží token s deklaracemi identity, může token analyzovat, extrahovat relevantní deklarace identity a rozhodovat se o autorizaci pomocí RBAC nebo přístupu založeného na deklaracích. WIF se používá k analýze tokenu a umožňuje používat rozhodnutí o autorizaci prostřednictvím snadno použitelného aplikačního programovacího rozhraní (API). Další informace o WIF naleznete v sadě WIF SDK (https://go.microsoft.com/fwlink/?LinkID=187481). Při úvahách o autorizaci v aplikacích a službách pracujících s deklaracemi zvažte následující diagram. Všimněte si, že po úspěšném ověření zprostředkovatel identity vygeneruje token (token zprostředkovatele identity v diagramu). Token zprostředkovatele identity může modul pravidel služby ACS transformovat. Služba ACS může přidat, odebrat nebo změnit deklarace identity, které jsou součástí tokenu, který zprostředkovatel identity vydává. Nakonec se token vydaný službou ACS odešle do aplikace a zpracuje ho WIF. Kontrola přístupu se provádí ve WIF pomocí přístupu RBAC nebo CBAC.
Řízení přístupu na základě rolí
RBAC představuje přístup k autorizaci, v rámci něhož aplikace spravuje a vynucuje uživatelská oprávnění na základě rolí uživatelů. Má-li uživatel roli, která je vyžadována k provedení určité akce, je mu udělen přístup. V opačném případě je přístup odepřen.
Metoda IPrincipal.IsInRole
Pokud chcete implementovat přístup RBAC v aplikacích pracujících s deklaracemi, použijte metodu IPrinicpal interface IsInRole(), stejně jako v aplikacích pracujících s deklaracemi. Existuje několik způsobů použití metody IsInRole():
Explicitní volání na IPrincipal.IsInRole("Administrator"). Při použití tohoto přístupu je výsledkem logická hodnota, kterou můžete používat v podmíněných příkazech. Toto volání lze používat kdekoli v kódu.
Použití objektu PrincipalPermission.Demand() na vyžádání zabezpečení Při použití tohoto přístupu je výsledkem výjimka, pokud není požadavek splněn. Tento přístup můžete zapracovat do své strategie pro zpracování výjimek. Vyvolání výjimek je mnohem dražší z hlediska výkonu v porovnání s vyřazením logické hodnoty. Tento přístup lze používat kdekoli v kódu.
Použití deklarativních atributů [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]. Tento přístup se nazývá deklarativní, protože slouží pro úpravu metody. Nelze jej používat v blocích kódu uvnitř implementace metody. Výsledkem je výjimka, pokud není požadavek splněn. Musíte ji zohlednit ve své strategii zpracování výjimek.
Použití autorizace adresy URL pomocí oddílu< autorizace> v web.config. Tento přístup je vhodný při správě autorizace na úrovni adresy URL. Ze všech dříve zmíněných přístupů se jedná o způsob použití na nejméně podrobné úrovni. Výhodou tohoto přístupu je, že se změny provádějí v konfiguračním souboru, což znamená, že je možné změny využívat bez nutnosti kompilace kódu.
Vyjádření rolí jako deklarací
Pokud je volána metoda IsInRole( ), je provedena kontrola, jestli má aktuální uživatel tuto roli. V aplikacích pracujících s deklaracemi je role vyjádřena pomocí deklarace typu Role, která by měla být k dispozici v tokenu. Deklarace typu Role je vyjádřena pomocí následujícího identifikátoru URI:
https://schemas.microsoft.com/ws/2008/06/identity/claims/role
K dispozici je několik možností, jak do tokenu doplnit deklaraci typu Role:
Pomocí modulu pravidel služby ACS – v tomto případě vytvoříte pravidlo pomocí portálu pro správu služby ACS nebo služby pro správu služby ACS k vytvoření pravidel transformace deklarací identity, která generují deklarace identity určitého typu role. Další informace o pravidlech a transformaci tokenů najdete v tématu Skupiny pravidel a pravidla a postupy: Implementace logiky transformace tokenu pomocí pravidel.
Transformace libovolných deklarací na typ role deklarací pomocí ClaimsAuthenticationManager – ClaimsAuthenticationManager je komponenta, která se dodává jako součást WIF. Umožňuje zachytávat žádosti při spuštění aplikace, kontrolovat tokeny a transformovat je pomocí přidání, změny nebo odebrání deklarací. Další informace o tom, jak použít ClaimsAuthenticationManager k transformaci deklarací identity, najdete v tématu Postupy: Implementace Access Control na základě rolí (RBAC) v aplikaci pracující s deklaracemi ASP.NET pomocí WIF a ACS
Mapování libovolných deklarací identity na typ role pomocí oddílu konfigurace samlSecurityTokenRequirement – deklarativní přístup, při kterém se transformace deklarací identity provádí pouze pomocí konfigurace a nevyžaduje se kódování.
Access Control na základě deklarací identity
CBAC je autorizační přístup, při kterém rozhodnutí o autorizaci udělit nebo odepřít přístup vychází z libovolné logiky, která k rozhodování využívá data dostupná v deklarací identity. Připomínáme, že v případě řízení přístupu RBAC se využívala jediná deklarace, a to deklarace typu Role. Deklarace typu Role umožňovala zjistit, zda uživatel patří či nepatří do určité role. Proces rozhodování o autorizaci s použitím autorizace na základě deklarací ilustrují následující kroky:
Aplikace obdrží žádost.
Aplikace extrahuje příchozí deklarace identity.
Aplikace předá deklarace mechanismu, který implementuje rozhodovací logiku. Může to být kód v paměti nebo volání webové služby, dotaz na databázi nebo může vyvolat sofistikovaný modul pravidel.
Rozhodovací mechanismus vypočítá výsledek na základě deklarací.
Přístup je udělen, pokud je výsledkem hodnota true, a odepřen, pokud je výsledkem hodnota false. Pravidlem může být například to, že uživatel má věk 21 nebo vyšší, žije ve státě Washington a byl ověřen Windows Live ID (účet Microsoft).
Služba ACS slouží jako služba ZABEZPEČENÍ, která vydává tokeny, které přenášejí deklarace identity. Pomocí modulu pravidel služby ACS můžete řídit, které deklarace identity se vydávají – jak typy deklarací identity, tak hodnoty. Další informace o modulu pravidel služby ACS najdete v tématu Skupiny pravidel a pravidla a postupy: Implementace logiky transformace tokenu pomocí pravidel. ClaimsAuthorizationManager je klíčem k implementaci CBAC v aplikacích pracujících s deklaracemi. ClaimsAuthorizationManager je komponenta, která se dodává jako součást WIF. Komponenta ClaimsAuthorizationManager umožňuje zachytávat příchozí žádosti a implementovat jakoukoli logiku, která rozhoduje o autorizaci na základě obdržených deklarací. Jedná se také o bod rozšiřitelnosti, kdy se rozhodnutí o autorizaci dají externalizovat a oddělit od kódu aplikace. To je důležité, pokud je potřeba logiku autorizace změnit. V takovém případě používání komponenty ClaimsAuthorizationManager neovlivní integritu aplikace, a tím snižuje pravděpodobnost chyby v aplikaci v důsledku této změny. Další informace o tom, jak použít ClaimsAuthorizationManager k implementaci řízení přístupu na základě deklarací, najdete v tématu Postupy: Implementace autorizace deklarací v ASP.NET aplikaci pracující s deklaracemi pomocí WIF a ACS.