Základy zabezpečení a podpora ASP.NET (C#)
Scott Mitchell
Poznámka:
Od napsání tohoto článku jsou poskytovatelé členství ASP.NET nahrazeni ASP.NET Identitou. Důrazně doporučujeme aktualizovat aplikace tak, aby používaly platformu ASP.NET Identity , a ne na poskytovatele členství, kteří jsou v době psaní tohoto článku doporučeni. ASP.NET Identity má řadu výhod oproti systému členství ASP.NET, včetně:
- Lepší výkon
- Vylepšená rozšiřitelnost a testovatelnost
- Podpora OAuth, OpenID Connect a dvojúrovňového ověřování
- Podpora identit na základě deklarací identity
- Lepší interoperabilita s ASP.Net Core
Toto je první kurz v řadě kurzů, který prozkoumá techniky ověřování návštěvníků prostřednictvím webového formuláře, autorizaci přístupu k určitým stránkám a funkcím a správě uživatelských účtů v aplikaci ASP.NET.
Úvod
Co je jedno, co fóra, weby elektronického obchodování, online e-mailové weby, portálové weby a weby sociálních sítí mají společné? Všechny nabízejí uživatelské účty. Weby, které nabízejí uživatelské účty, musí poskytovat řadu služeb. Minimálně noví návštěvníci musí mít možnost vytvořit účet a vracející se návštěvníci se musí přihlásit. Takové webové aplikace mohou provádět rozhodnutí na základě přihlášeného uživatele: některé stránky nebo akce mohou být omezeny pouze na přihlášené uživatele nebo na určitou podmnožinu uživatelů; jiné stránky můžou zobrazovat informace specifické pro přihlášeného uživatele nebo můžou zobrazovat více nebo méně informací v závislosti na tom, který uživatel stránku zobrazuje.
Toto je první kurz v řadě kurzů, který prozkoumá techniky ověřování návštěvníků prostřednictvím webového formuláře, autorizaci přístupu k určitým stránkám a funkcím a správě uživatelských účtů v aplikaci ASP.NET. V průběhu těchto kurzů prozkoumáme, jak:
- Identifikace a přihlášení uživatelů k webu
- Použijte ASP. Architektura členství v net pro správu uživatelských účtů
- Vytváření, aktualizace a odstraňování uživatelských účtů
- Omezení přístupu k webové stránce, adresáři nebo konkrétní funkci na základě přihlášeného uživatele
- Použijte ASP. Architektura rolí net pro přidružení uživatelských účtů k rolím
- Správa uživatelských rolí
- Omezení přístupu k webové stránce, adresáři nebo konkrétní funkci na základě přihlášené role uživatele
- Přizpůsobení a rozšíření ASP Webové ovládací prvky zabezpečení sítě NET
Tyto kurzy jsou zaměřené na stručné a poskytují podrobné pokyny s mnoha snímky obrazovky, které vás provedou vizuálně procesem. Každý kurz je k dispozici ve verzích C# a Visual Basic a zahrnuje stažení celého použitého kódu. (Tento první kurz se zaměřuje na koncepty zabezpečení z hlediska vysoké úrovně, a proto neobsahuje žádný přidružený kód.)
V tomto kurzu probereme důležité koncepty zabezpečení a možnosti, které jsou k dispozici v ASP.NET, které vám pomůžou s implementací ověřování formulářů, autorizace, uživatelských účtů a rolí. Pusťme se do toho.
Poznámka:
Zabezpečení je důležitým aspektem každé aplikace, která zahrnuje fyzická, technologická a politická rozhodnutí a vyžaduje vysoký stupeň plánování a znalosti domény. Tato série kurzů není určená jako vodítko pro vývoj zabezpečených webových aplikací. Zaměřuje se spíše na ověřování formulářů, autorizaci, uživatelské účty a role. Některé koncepty zabezpečení, které se kolem těchto problémů vyvíjejí, jsou popsány v této řadě, ale jiné jsou nepotřebné.
Ověřování, autorizace, uživatelské účty a role
Ověřování, autorizace, uživatelské účty a role jsou čtyři termíny, které se budou používat velmi často v rámci této série kurzů, takže bych rád chvíli definoval tyto termíny v kontextu zabezpečení webu. V modelu klientského serveru, jako je například internet, existuje mnoho scénářů, ve kterých server potřebuje identifikovat klienta provádějícího požadavek. Ověřování je proces zjišťování identity klienta. Klient, který byl úspěšně identifikován, se říká, že je ověřený. Neidentifikovaný klient je označen jako neověřený nebo anonymní.
Zabezpečené systémy ověřování zahrnují alespoň jednu z následujících tří omezujících vlastností: něco, co víte, něco, co máte, nebo něco, co jste. Většina webových aplikací spoléhá na něco, co klient ví, například heslo nebo PIN kód. Informace používané k identifikaci uživatele – její uživatelské jméno a heslo , například – se označují jako přihlašovací údaje. Tato série kurzů se zaměřuje na ověřování pomocí formulářů, což je model ověřování, ve kterém se uživatelé přihlašují k webu zadáním přihlašovacích údajů ve formuláři webové stránky. K tomuto typu ověřování došlo dříve. Přejděte na libovolný web elektronického obchodování. Až budete připraveni k pokladně, zobrazí se výzva k přihlášení zadáním uživatelského jména a hesla do textových polí na webové stránce.
Kromě identifikace klientů může server potřebovat omezit, jaké prostředky nebo funkce jsou přístupné v závislosti na klientovi, který požadavek provádí. Autorizace je proces určení, jestli má konkrétní uživatel oprávnění pro přístup ke konkrétnímu prostředku nebo funkci.
Uživatelský účet je úložiště pro uchování informací o konkrétním uživateli. Uživatelské účty musí obsahovat minimálně informace, které uživatele jednoznačně identifikují, například přihlašovací jméno a heslo uživatele. Kromě těchto základních informací můžou uživatelské účty zahrnovat například: e-mailovou adresu uživatele; datum a čas vytvoření účtu; datum a čas, kdy se naposledy přihlásili; jméno a příjmení; telefonní číslo; a poštovní adresu. Při ověřování pomocí formulářů se informace o uživatelských účtech obvykle ukládají do relační databáze, jako je Microsoft SQL Server.
Webové aplikace, které podporují uživatelské účty, můžou volitelně seskupovat uživatele do rolí. Role je jednoduše popisek použitý pro uživatele a poskytuje abstrakci pro definování autorizačních pravidel a funkcí na úrovni stránky. Například web může obsahovat roli Správce s autorizačními pravidly, která zakazují přístup ke konkrétní sadě webových stránek všem uživatelům, ale správcem. Kromě toho může celá řada stránek, které jsou přístupné všem uživatelům (včetně uživatelů, kteří nejsou správci), zobrazovat další data nebo nabízet další funkce při návštěvě uživatelů v roli Správci. Pomocírolíchm rolím můžeme definovat na základě rolí na základě rolí, nikoli podle uživatele.
Ověřování uživatelů v aplikaci ASP.NET
Když uživatel zadá adresu URL do okna adresy prohlížeče nebo klikne na odkaz, prohlížeč vytvoří požadavek HTTP (Hypertext Transfer Protocol) na webový server pro zadaný obsah, ať už jde o stránku ASP.NET, obrázek, javascriptový soubor nebo jakýkoli jiný typ obsahu. Webový server má za úkol vrátit požadovaný obsah. Při tom musí určit řadu věcí o požadavku, včetně toho, kdo žádost provedl a jestli má identita oprávnění k načtení požadovaného obsahu.
Ve výchozím nastavení prohlížeče odesílají požadavky HTTP, které neobsahují jakýkoli druh identifikačních informací. Pokud ale prohlížeč obsahuje ověřovací informace, webový server spustí ověřovací pracovní postup, který se pokusí identifikovat klienta provádějícího požadavek. Postup ověřování závisí na typu ověřování používaném webovou aplikací. ASP.NET podporuje tři typy ověřování: Windows, Passport a formuláře. Tato sériekurzůch
Ověřování prostřednictvím ověřování systému Windows
Pracovní postup ověřování systému Windows používá jednu z následujících technik ověřování:
- Základní ověřování
- Ověřování hodnotou hash
- Integrované ověřování systému Windows
Všechny tři techniky fungují zhruba stejným způsobem: když přijde neoprávněný anonymní požadavek, webový server odešle zpět odpověď HTTP, která značí, že se k pokračování vyžaduje autorizace. Prohlížeč pak zobrazí modální dialogové okno, které uživatele vyzve k zadání uživatelského jména a hesla (viz obrázek 1). Tyto informace se pak odešlou zpět na webový server prostřednictvím hlavičky HTTP.
Obrázek 1: Modální dialogové okno vyzve uživatele k zadání přihlašovacích údajů
Zadané přihlašovací údaje se ověřují ve Windows User Storu webového serveru. To znamená, že každý ověřený uživatel ve vaší webové aplikaci musí mít ve vaší organizaci účet Windows. To je běžné ve scénářích intranetu. Ve skutečnosti, když používáte integrované ověřování systému Windows v nastavení intranetu, prohlížeč automaticky poskytne webový server s přihlašovacími údaji použitými k přihlášení k síti, čímž potlačí dialogové okno zobrazené na obrázku 1. I když je ověřování systému Windows skvělé pro intranetové aplikace, je obvykle pro internetové aplikace nedostupné, protože nechcete vytvářet účty Systému Windows pro každého a každého uživatele, který se zaregistruje na vašem webu.
Ověřování pomocí formulářů
Ověřování pomocí formulářů je naopak ideální pro internetové webové aplikace. Vzpomeňte si, že ověřování pomocí formulářů identifikuje uživatele tím, že ho vyzve k zadání přihlašovacích údajů prostřednictvím webového formuláře. V důsledku toho se uživatel pokusí o přístup k neoprávněnému prostředku, automaticky se přesměruje na přihlašovací stránku, kde může zadat své přihlašovací údaje. Odeslané přihlašovací údaje se pak ověřují vůči vlastnímu úložišti uživatelů – obvykle k databázi.
Po ověření odeslaných přihlašovacích údajů se pro uživatele vytvoří lístek ověřování pomocí formulářů. Tento lístek označuje, že uživatel byl ověřen a obsahuje identifikační informace, jako je uživatelské jméno. Lístek ověřování pomocí formulářů je (obvykle) uložený jako soubor cookie v klientském počítači. Následné návštěvy webu proto zahrnují lístek ověřování pomocí formulářů v požadavku HTTP, čímž webové aplikaci umožní identifikovat uživatele, jakmile se přihlásí.
Obrázek 2 znázorňuje pracovní postup ověřování formulářů z pohledu základního bodu. Všimněte si, že části ověřování a autorizace v ASP.NET fungují jako dvě samostatné entity. Systém ověřování formulářů identifikuje uživatele (nebo sestavy, které jsou anonymní). Autorizační systém určuje, jestli má uživatel přístup k požadovanému prostředku. Pokud je uživatel neoprávněný (jak je na obrázku 2 při pokusu o anonymní návštěvu ProtectedPage.aspx), systém autorizace hlásí, že je uživatel odepřen, což způsobí, že ověřovací systém formulářů automaticky přesměruje uživatele na přihlašovací stránku.
Jakmile se uživatel úspěšně přihlásí, následné požadavky HTTP zahrnují lístek ověřování pomocí formulářů. Ověřovací systém formulářů pouze identifikuje uživatele – jedná se o autorizační systém, který určuje, jestli má uživatel přístup k požadovanému prostředku.
Obrázek 2: Pracovní postup ověřování pomocí formulářů
Podrobněji se budeme zabývat ověřováním pomocí formulářů v dalším kurzu, přehledem ověřování pomocí formulářů. Další informace o ASP. Možnosti ověřování net najdete v tématu ASP.NET Ověřování.
Omezení přístupu k webovým stránkám, adresářům a funkcím stránek
ASP.NET obsahuje dva způsoby, jak určit, jestli má konkrétní uživatel oprávnění pro přístup ke konkrétnímu souboru nebo adresáři:
- Autorizace souborů – protože ASP.NET stránky a webové služby jsou implementovány jako soubory, které se nacházejí v systému souborů webového serveru, lze přístup k těmto souborům zadat prostřednictvím seznamů řízení přístupu (ACL). Autorizace souborů se nejčastěji používá s ověřováním systému Windows, protože seznamy ACL jsou oprávnění, která platí pro účty Windows. Při ověřování pomocí formulářů se všechny požadavky na operační systém a systém souborů provádějí stejným účtem Windows bez ohledu na uživatele, který web navštíví.
- Autorizace adresy URL – s autorizací adresy URL určuje vývojář stránky autorizační pravidla v souboru Web.config. Tato autorizační pravidla určují, k jakým uživatelům nebo rolím mají v aplikaci povolený přístup nebo k jakým rolím mají přístup k určitým stránkám nebo adresářům.
Autorizace souborů a autorizace adresy URL definují autorizační pravidla pro přístup ke konkrétní ASP.NET stránce nebo pro všechny ASP.NET stránky v určitém adresáři. Pomocí těchto technik můžeme instruovat ASP.NET, aby odepřeli žádosti na konkrétní stránku konkrétního uživatele nebo povolili přístup k sadě uživatelů a odepřeli přístup všem ostatním. A co scénáře, kdy mají všichni uživatelé přístup na stránku, ale funkce stránky závisí na uživateli? Mnoho webů, které podporují uživatelské účty, například obsahuje stránky, které zobrazují jiný obsah nebo data pro ověřené uživatele a anonymní uživatele. Anonymní uživatel může vidět odkaz pro přihlášení k webu, zatímco ověřený uživatel by místo toho viděl zprávu, jako je vítejte, uživatelské jméno spolu s odkazem pro odhlášení. Další příklad: při prohlížení položky na místě aukce uvidíte různé informace v závislosti na tom, zda jste nabízející nebo jedna aukční položka.
Takové úpravy na úrovni stránky lze provádět deklarativním nebo programovým způsobem. Pokud chcete zobrazit jiný obsah pro anonymní než ověřené uživatele, jednoduše přetáhněte ovládací prvek LoginView na stránku a zadejte příslušný obsah do jeho šablon AnonymousTemplate a LoggedInTemplate. Případně můžete programově určit, jestli je aktuální požadavek ověřený, kdo je uživatel a jaké role patří (pokud existuje). Tyto informace můžete použít k zobrazení nebo skrytí sloupců v mřížce nebo panelech na stránce.
Tato série obsahuje tři kurzy, které se zaměřují na autorizaci. Autorizacena základě uživatele zkoumá, jak omezit přístup na stránku nebo stránky v adresáři pro konkrétní uživatelské účty; Autorizace založená na rolích se dívá na poskytování autorizačních pravidel na úrovni role. Nakonec kurz Zobrazení obsahu na základě aktuálně přihlášeného uživatele zkoumá úpravy obsahu a funkčnosti konkrétní stránky na základě uživatele, který stránku navštíví. Další informace o ASP. Možnosti autorizace net najdete v tématu ASP.NET Autorizace.
Uživatelské účty a role
ASP. Ověřování formulářů net poskytuje uživatelům infrastrukturu pro přihlášení k webu a zapamatování jejich ověřeného stavu při návštěvách stránek. Autorizace adresy URL nabízí architekturu pro omezení přístupu ke konkrétním souborům nebo složkám v aplikaci ASP.NET. Ani jedna funkce však poskytuje prostředky pro ukládání informací o uživatelských účtech nebo správu rolí.
Před ASP.NET 2.0 zodpovídali vývojáři za vytváření vlastních úložišť uživatelů a rolí. Byli také na háku pro navrhování uživatelských rozhraní a psaní kódu pro základní stránky související s uživatelským účtem, jako je přihlašovací stránka a stránka pro vytvoření nového účtu, mimo jiné. Bez integrované architektury uživatelských účtů v ASP.NET musel každý vývojář implementovat uživatelské účty na své vlastní rozhodnutí o návrhu otázek, jako je, Návody ukládat hesla nebo jiné citlivé informace? a jaké pokyny mám vynutit ohledně délky a síly hesla?
Dnes je implementace uživatelských účtů v aplikaci ASP.NET mnohem jednodušší díky rozhraní Členství a integrovaným ovládacím prvkům Přihlašovací web. Architektura Členství je několik tříd v oboru názvů System.Web.Security, které poskytují funkce pro provádění základních úloh souvisejících s uživatelskými účty. Klíčovou třídou v rámci členství je třída Členství, která má metody jako:
- CreateUser
- DeleteUser
- GetAllUsers
- GetUser
- UpdateUser
- ValidateUser
Architektura členství používá model zprostředkovatele, který čistě odděluje rozhraní API architektury Členství od jeho implementace. To umožňuje vývojářům používat běžné rozhraní API, ale umožňuje jim používat implementaci, která vyhovuje vlastním potřebám své aplikace. Stručně řečeno, třída Membership definuje základní funkce rozhraní (metody, vlastnosti a události), ale ve skutečnosti neposkytuje žádné podrobnosti implementace. Místo toho metody třídy Členství vyvolat nakonfigurovaného zprostředkovatele, což je to, co provádí skutečnou práci. Pokud je například vyvolána metoda CreateUser třídy Membership, třída Membership nezná podrobnosti o úložišti uživatelů. Neví, jestli se uživatelé spravují v databázi nebo v souboru XML nebo v jiném úložišti. Třída členství zkoumá konfiguraci webové aplikace, aby určila, na jakého zprostředkovatele má delegovat volání, a tato třída zprostředkovatele zodpovídá za skutečné vytvoření nového uživatelského účtu v příslušném úložišti uživatelů. Tato interakce je znázorněna na obrázku 3.
Microsoft dodává dvě třídy zprostředkovatele členství v rozhraní .NET Framework:
- ActiveDirectoryMembershipProvider – implementuje rozhraní API členství v Active Directory a na serverech adam (Active Directory Application Mode).
- SqlMembershipProvider – implementuje rozhraní API členství v databázi SQL Serveru.
Tato série kurzů se zaměřuje výhradně na SqlMembershipProvider.
Obrázek 03: Model zprostředkovatele umožňuje bezproblémové zapojení různých implementací do rozhraní (kliknutím zobrazíte obrázek plné velikosti).
Výhodou modelu poskytovatele je, že alternativní implementace můžou vyvíjet microsoft, dodavatelé třetích stran nebo jednotliví vývojáři a bezproblémově zapojit do architektury Členství. Společnost Microsoft například vydala zprostředkovatele členství pro databáze Microsoft Accessu. Další informace o poskytovatelích členství najdete v sadě Provider Toolkit, která obsahuje názorný postup zprostředkovatelů členství, ukázkové vlastní zprostředkovatele, více než 100 stránek dokumentace k modelu zprostředkovatele a kompletní zdrojový kód pro předdefinované zprostředkovatele členství (konkrétně ActiveDirectoryMembershipProvider a SqlMembershipProvider).
ASP.NET 2.0 také zavedli architekturu rolí. Podobně jako v rámci členství je architektura Rolí postavena na základě modelu zprostředkovatele. Jeho rozhraní API je vystaveno prostřednictvím třídy Role a rozhraní .NET Framework se dodává se třemi třídami zprostředkovatele:
- AuthorizationStoreRoleProvider – spravuje informace o rolích v úložišti zásad správce autorizace, jako je Active Directory nebo ADAM.
- SqlRoleProvider – implementuje role v databázi SQL Serveru.
- WindowsTokenRoleProvider – přidruží informace o rolích na základě skupiny Windows návštěvníka. Tato metoda se obvykle používá s ověřováním systému Windows.
Tato série kurzů se zaměřuje výhradně na SqlRoleProvider.
Vzhledem k tomu, že model zprostředkovatele obsahuje jedno rozhraní API pro předávání (třídy členství a rolí), je možné vytvořit funkce kolem tohoto rozhraní API, aniž by se museli starat o podrobnosti implementace – to zprostředkovatelů vybraných vývojářem stránky. Toto sjednocené rozhraní API umožňuje dodavatelům Microsoftu a třetích stran vytvářet webové ovládací prvky, které jsou propojené s architekturami členství a rolí. ASP.NET se dodává s řadou ovládacích prvků přihlašovacího webu pro implementaci běžných uživatelských rozhraní uživatelského účtu. Například ovládací prvek Přihlášení vyzve uživatele k zadání přihlašovacích údajů, ověří je a pak je přihlásí prostřednictvím ověřování pomocí formulářů. Ovládací prvek LoginView nabízí šablony pro zobrazení různých revizí anonymním uživatelům a ověřeným uživatelům nebo jiné značky na základě role uživatele. A ovládací prvek CreateUserWizard poskytuje podrobné uživatelské rozhraní pro vytvoření nového uživatelského účtu.
Pod jednotlivými ovládacími prvky přihlášení pracují s architekturami členství a rolí. Většinu ovládacích prvků přihlášení je možné implementovat bez nutnosti psát jeden řádek kódu. Tyto ovládací prvky podrobněji prozkoumáme v budoucích kurzech, včetně technik pro rozšíření a přizpůsobení jejich funkcí.
Shrnutí
Všechny webové aplikace, které podporují uživatelské účty, vyžadují podobné funkce, například: možnost přihlášení uživatelů a zapamatování jejich stavu přihlášení napříč návštěvami stránek; webovou stránku pro nové návštěvníky, kteří chtějí vytvořit účet; a možnost vývojáře stránky určit, jaké prostředky, data a funkce jsou k dispozici pro uživatele nebo role. Úlohy ověřování a autorizace uživatelů a správy uživatelských účtů a rolí jsou v ASP.NET aplikacích výrazně snadné díky ověřování formulářů, autorizaci adres URL a architekturám členství a rolí.
V průběhu dalších několika kurzů tyto aspekty prozkoumáme vytvořením funkční webové aplikace od základů postupně. V dalším dvou kurzu podrobně prozkoumáme ověřování pomocí formulářů. Uvidíme pracovní postup ověřování formulářů v akci, rozebereme lístek ověřování formulářů, probereme otázky zabezpečení a podíváme se, jak nakonfigurovat systém ověřování formulářů – a to vše při vytváření webové aplikace, která návštěvníkům umožňuje přihlášení a odhlášení.
Šťastné programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:
- ASP.NET 2.0 Členství, role, ověřování formulářů a prostředky zabezpečení
- ASP.NET 2.0 Pokyny pro zabezpečení
- ověřování ASP.NET
- autorizace ASP.NET
- Přehled přihlašovacích ovládacích prvků ASP.NET
- Zkoumání členství, rolí a profilu ASP.NET 2.0
- Jak můžu: Zabezpečit web pomocí členství a rolí? (Video)
- Úvod do členství
- MSDN Security Developer Center
- Profesionální ASP.NET 2.0 Zabezpečení, členství a správa rolí (ISBN: 978-0-7645-9698-8)
- Provider Toolkit
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 za 24 hodin. Je dostupný na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím svého blogu, který lze najít na http://ScottOnWriting.NET.
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavní kontrolor pro tento kurz byl Tento kurz série byl zkontrolován mnoha užitečnými recenzenty. Vedoucí recenzenti tohoto kurzu zahrnují Alicja Maziarz, John Suru a Teresa Murphy. Chcete si projít nadcházející články MSDN? Pokud ano, zahoďte mi řádek na mitchell@4GuysFromRolla.com.