Základy zabezpečení a podpora ASP.NET (VB)
Poznámka
Od napsání tohoto článku se zprostředkovatelé členství ASP.NET nahradili službou ASP.NET Identity. Důrazně doporučujeme aktualizovat aplikace tak, aby používaly platformu ASP.NET Identity Platform místo zprostředkovatelů členství, které se objevovalo v době psaní tohoto článku. ASP.NET Identity má oproti systému členství ASP.NET řadu výhod, mezi které patří:
- Lepší výkon
- Vylepšená rozšiřitelnost a testovatelnost
- Podpora OAuth, OpenID Connect a dvojúrovňového ověřování
- Podpora identit založených na 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 ke konkrétním stránkám a funkcím a správu uživatelských účtů v ASP.NET aplikaci.
Úvod
Co mají fóra, weby elektronického obchodování, online e-mailové weby, portálové weby a sociální sítě společné? Všechny nabízejí uživatelské účty. Weby, které nabízejí uživatelské účty, musí poskytovat řadu služeb. Noví návštěvníci musí mít minimálně možnost vytvořit účet a vracející se návštěvníci se musí mít možnost přihlásit. Takové webové aplikace mohou rozhodovat 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 či 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 ke konkrétním stránkám a funkcím a správu uživatelských účtů v ASP.NET aplikaci. V průběhu těchto kurzů prozkoumáme následující postupy:
- Identifikace uživatelů a přihlášení k webu
- Použijte ASP. Rozhraní Členství na platformě 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í od společnosti NET pro přidružení uživatelských účtů k rolím
- Správa rolí uživatele
- Omezení přístupu k webové stránce, adresáři nebo konkrétní funkci na základě role přihlášeného uživatele
- Přizpůsobení a rozšíření asp. Webové ovládací prvky zabezpečení systému NET
Tyto kurzy jsou zaměřené tak, aby byly stručné a poskytují podrobné pokyny s množstvím snímků obrazovky, které vás vizuálně provedou 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 pohledu 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í pomocí 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čena jako vodítko pro vývoj zabezpečených webových aplikací. Zaměřuje se konkrétně na ověřování pomocí formulářů, autorizaci, uživatelské účty a role. Zatímco některé koncepty zabezpečení, které se kolem těchto problémů týkají, jsou v této sérii probírané, jiné zůstanou neprozkoušené.
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 v této sérii kurzů budou velmi často používat, a proto bych rád v krátké době definoval tyto termíny v kontextu zabezpečení webu. V modelu klient-server, jako je internet, existuje mnoho scénářů, ve kterých musí server identifikovat klienta, který požadavek vytváří. Ověřování je proces zjišťování identity klienta. O klientovi, který byl úspěšně identifikován, se říká, že je ověřený. Neidentifikovaný klient je neověřený nebo anonymní.
Systémy zabezpečeného 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 zná, například heslo nebo PIN kód. Informace používané k identifikaci uživatele – například jeho uživatelské jméno a heslo – 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í, při kterém se uživatelé přihlašují k webu zadáním svých přihlašovacích údajů ve formuláři webové stránky. S tímto typem ověřování jsme se už všichni setkali. Přejděte na jakýkoli web elektronického obchodování. Až budete připraveni k pokladně, budete vyzváni 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, které prostředky nebo funkce jsou přístupné v závislosti na klientovi, který požadavek vytváří. 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ávání informací o konkrétním uživateli. Uživatelské účty musí obsahovat minimálně informace, které uživatele jednoznačně identifikují, například jeho přihlašovací jméno a heslo. Spolu s touto základní informací mohou uživatelské účty zahrnovat například: e-mailovou adresu uživatele; datum a čas vytvoření účtu; datum a čas posledního přihlášení; 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í v relační databázi, 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, který se použije pro uživatele a poskytuje abstrakci pro definování autorizačních pravidel a funkcí na úrovni stránek. Web může například obsahovat roli Správce s autorizačními pravidly, která zakazují přístup ke konkrétní sadě webových stránek komukoli kromě správce. 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, pokud je navštíví uživatelé s rolí Správce. Pomocí rolí můžeme tato autorizační pravidla definovat na základě rolí, nikoli podle jednotlivých uživatelů.
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č odešle webový server požadavek protokolu HTTP (Hypertext Transfer Protocol) na zadaný obsah, ať už se jedná o stránku ASP.NET, obrázek, soubor JavaScriptu nebo jakýkoli jiný typ obsahu. Webový server má za úkol vrátit požadovaný obsah. Přitom musí určit řadu věcí týkajících se požadavku, včetně toho, kdo žádost vytvořil a jestli je identita oprávněná k načtení požadovaného obsahu.
Ve výchozím nastavení prohlížeče odesílají požadavky HTTP, u kterých chybí jakýkoli druh identifikačních informací. Pokud ale prohlížeč obsahuje ověřovací informace, webový server spustí pracovní postup ověřování, který se pokusí identifikovat klienta, který požadavek vytváří. Postup pracovního postupu ověřování závisí na typu ověřování, které webová aplikace používá. ASP.NET podporuje tři typy ověřování: Windows, Passport a formuláře. Tato série kurzů se zaměřuje na ověřování pomocí formulářů, ale pojďme chvíli porovnat a porovnat úložiště a pracovní postupy ověřování windows.
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 neautorizovaný anonymní požadavek, webový server odešle zpět odpověď HTTP, která indikuje, že k pokračování je nutná 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 přes hlavičku HTTP odešlou zpět na webový server.
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 uživatelském úložišti webového serveru. To znamená, že každý ověřený uživatel ve vaší webové aplikaci musí mít ve vaší organizaci účet Systému Windows. To je v intranetových scénářích běžné. Při použití integrovaného ověřování systému Windows v nastavení intranetu prohlížeč ve skutečnosti webovému serveru automaticky poskytne přihlašovací údaje použité 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 neproveditelné pro internetové aplikace, protože nechcete vytvářet účty systému Windows pro každého uživatele, který se na vašem webu zaregistruje.
Ověřování prostřednictvím 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í ve vlastním uživatelském úložišti – obvykle v databázi.
Po ověření odeslaných přihlašovacích údajů se pro uživatele vytvoří lístek ověřování pomocí formuláře . 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ářů se (obvykle) ukládá jako soubor cookie na klientském počítači. Proto následné návštěvy webu zahrnují lístek ověřování formulářů v požadavku HTTP, což 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 vysoké úrovně. 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 hlásí, že je 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ý (jako na obrázku 2 při pokusu o anonymní návštěvu ProtectedPage.aspx), autorizační systém hlásí, že je uživatel odepřen, což způsobí, že systém ověřování formulářů uživatele automaticky přesměruje 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í formulářů. Systém ověřování formulářů pouze identifikuje uživatele – autorizační systém určuje, jestli má uživatel přístup k požadovanému prostředku.
Obrázek 2: Pracovní postup ověřování pomocí formulářů
V dalším kurzu Přehled ověřování pomocí formulářů se podrobněji podíváme na ověřování pomocí formulářů. Další informace o ASP. Možnosti ověřování pro net najdete v tématu ověřování ASP.NET.
Omezení přístupu k webovým stránkám, adresářům a funkcím stránek
ASP.NET zahrnuje dva způsoby, jak určit, jestli má konkrétní uživatel oprávnění pro přístup k určitému souboru nebo adresáři:
- Autorizace souborů – vzhledem k tomu, ž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, je možné přístup k těmto souborům určit prostřednictvím Access Control Seznamy (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 Systému Windows. Při ověřování pomocí formulářů se všechny požadavky na úrovni operačního systému a systému souborů spouští stejným účtem Windows bez ohledu na to, jaký uživatel web navštíví.
- Autorizace adres URL – u autorizace adresy URL určuje vývojář stránky autorizační pravidla v Web.config. Tato autorizační pravidla určují, ke kterým uživatelům nebo rolím je v aplikaci povolen přístup nebo kterým je odepřen přístup k určitým stránkám nebo adresářům.
Autorizace souborů a autorizace adres URL definují autorizační pravidla pro přístup k určité ASP.NET stránce nebo pro všechny ASP.NET stránky v konkrétním adresáři. Pomocí těchto technik můžeme dát ASP.NET pokyn, aby odepřeli žádosti na konkrétní stránku pro konkrétního uživatele nebo povolili přístup skupině uživatelů a odepřeli přístup všem ostatním. A co scénáře, kdy všichni uživatelé mají přístup ke stránce, ale její funkce závisí na uživateli? Například mnoho webů, které podporují uživatelské účty, má stránky, které zobrazují jiný obsah nebo data pro ověřené uživatele a anonymní uživatele. Anonymnímu uživateli se může zobrazit odkaz pro přihlášení k webu, zatímco ověřený uživatel by místo toho viděl zprávu typu Vítejte zpět, Uživatelské jméno spolu s odkazem na odhlášení. Další příklad: při prohlížení položky na aukčním webu uvidíte různé informace v závislosti na tom, jestli jste nabízející nebo ten, kdo danou položku draží.
Takové úpravy na úrovni stránky lze provádět deklarativně nebo programově. Pokud chcete anonymním uživatelům zobrazit jiný obsah než ověřeným uživatelům, jednoduše přetáhněte na stránku ovládací prvek LoginView a zadejte příslušný obsah do svých šablon AnonymousTemplate a LoggedInTemplate. Případně můžete programově určit, jestli je aktuální požadavek ověřený, kdo je uživatel a k jakým rolím patří (pokud existují). 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. Autorizace na základě uživatelezkoumá, jak omezit přístup ke stránce nebo stránkám v adresáři pro konkrétní uživatelské účty. Autorizace na základě role se zabývá poskytováním autorizačních pravidel na úrovni role. A 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 pro net najdete v tématu autorizace ASP.NET.
Uživatelské účty a role
ASP. Ověřování pomocí formulářů net poskytuje uživatelům infrastrukturu pro přihlášení k webu a zapamatování stavu ověření při návštěvách stránek. Autorizace adres URL nabízí architekturu pro omezení přístupu ke konkrétním souborům nebo složkám v aplikaci ASP.NET. Ani jedna z těchto funkcí ale nespravuje prostředky pro ukládání informací o uživatelských účtech nebo správu rolí.
Před ASP.NET 2.0 byli vývojáři zodpovědní za vytváření vlastních úložišť uživatelů a rolí. Byli také připravení navrhnout uživatelská rozhraní a psát kód 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ář, který implementuje uživatelské účty, přijmout vlastní rozhodnutí o návrhu v otázkách, jako je Návody ukládat hesla nebo jiné citlivé informace? a Jaké pokyny mám zavést ohledně délky a síly hesla?
Implementace uživatelských účtů v aplikaci ASP.NET je dnes mnohem jednodušší díky architektuře členství a integrovaným ovládacím prvkům přihlašovacího webu. 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ým účtem. Klíčovou třídou v rámci členství je třída Membership, 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 vývojářům umožňuje používat běžné rozhraní API, ale umožňuje jim používat implementaci, která vyhovuje vlastním potřebám jejich aplikace. Stručně řečeno, třída Membership definuje základní funkce architektury (metody, vlastnosti a události), ale ve skutečnosti neposkytuje žádné podrobnosti implementace. Místo toho metody třídy Membership vyvolat nakonfigurovaného zprostředkovatele, který provádí skutečnou práci. Pokud je například vyvolána metoda CreateUser třídy Membership, třída Membership nezná podrobnosti o uživatelském úložišti. Neví, jestli se uživatelé udržují v databázi, v souboru XML nebo v jiném úložišti. Třída Membership zkoumá konfiguraci webové aplikace, aby určila, na jakého zprostředkovatele má delegovat volání, a tato třída zprostředkovatele je zodpovědná za skutečné vytvoření nového uživatelského účtu v příslušném uživatelském úložišti. 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í na serverech Active Directory a Active Directory Application Mode (ADAM).
- SqlMembershipProvider – implementuje rozhraní API pro členství v databázi SQL Server.
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 architektury (kliknutím zobrazíte obrázek v plné velikosti)
Výhodou modelu poskytovatele je, že alternativní implementace mohou být vyvinuty společností Microsoft, dodavateli třetích stran nebo jednotlivými vývojáři a bezproblémově zapojeny do architektury členství. Společnost Microsoft například vydala poskytovatele členství pro databáze Microsoft Accessu. Další informace o poskytovatelích členství najdete v sadě nástrojů Provider Toolkit, která obsahuje návod na zprostředkovatele členství, ukázkové vlastní zprostředkovatele, více než 100 stránek dokumentace k modelu zprostředkovatele a úplný zdrojový kód pro předdefinované zprostředkovatele členství (konkrétně ActiveDirectoryMembershipProvider a SqlMembershipProvider).
ASP.NET 2.0 také zavedl architekturu Rolí. Stejně jako architektura členství je architektura rolí sestavena na základě modelu zprostředkovatele. Jeho rozhraní API je vystaveno prostřednictvím třídy Roles 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 Server.
- 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řesměrování (třídy Členství a Role), je možné kolem rozhraní API sestavit funkce, aniž byste se museli starat o podrobnosti implementace – ty zpracovávají poskytovatelé vybraní 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 v rozhraních členství a rolí. ASP.NET se dodává s řadou webových ovládacích prvků login pro implementaci běžných uživatelských rozhraní uživatelských účtů. Například ovládací prvek Login vyzve uživatele k zadání přihlašovacích údajů, ověří je a pak ho přihlásí pomocí ověřování pomocí formulářů. Ovládací prvek LoginView nabízí šablony pro zobrazení různých značek anonymním uživatelům oproti ověřeným uživatelům nebo různé značky na základě role uživatele. Ovládací prvek CreateUserWizard poskytuje podrobné uživatelské rozhraní pro vytvoření nového uživatelského účtu.
Pod ním se týkají různých ovládacích prvků přihlášení, které interagují s architekturami členství a rolí. Většinu ovládacích prvků přihlášení je možné implementovat bez nutnosti psát jediný řá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í.
Souhrn
Všechny webové aplikace, které podporují uživatelské účty, vyžadují podobné funkce, jako je například možnost, aby se uživatelé mohli přihlásit a nechat si pamatovat stav přihlášení při návštěvách stránek; webovou stránku pro nové návštěvníky k vytvoření účtu; a schopnost vývojáře stránky určit, jaké prostředky, data a funkce budou k dispozici pro uživatele nebo role. Úlohy ověřování a autorizace uživatelů a správy uživatelských účtů a rolí je v ASP.NET aplikacích mimořádně snadné díky ověřování formulářů, autorizaci adres URL a rozhraním členství a rolí.
V průběhu dalších několika kurzů tyto aspekty prozkoumáme tak, že postupně sestavíme funkční webovou aplikaci od základů. V dalších dvou kurzech podrobně prozkoumáme ověřování pomocí formulářů. Uvidíme, jak funguje pracovní postup ověřování formulářů, rozebereme lístek ověřování formulářů, probereme otázky zabezpečení a zjistíme, jak nakonfigurovat systém ověřování formulářů – to vše při vytváření webové aplikace, která návštěvníkům umožní přihlásit se a odhlásit se.
Šť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í:
- členství ASP.NET 2.0, role, ověřování formulářů a prostředky zabezpečení
- pokyny k zabezpečení ASP.NET 2.0
- Ověřování pomocí technologie ASP.NET
- autorizace ASP.NET
- Přehled ovládacích prvků přihlášení ASP.NET
- Zkoumání členství, rolí a profilu ASP.NET 2.0
- Postupy: Zabezpečení webu pomocí členství a rolí? (Video)
- Úvod do členství
- MSDN Security Developer Center
- Professional ASP.NET 2.0 Security, Membership, and Role Management (ISBN: 978-0-7645-9698-8)
- Provider Toolkit
O autorovi
Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho zastihnout na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na adrese http://ScottOnWriting.NET.
Zvláštní poděkování
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavní revidující pro tento kurz byla Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Mezi hlavní recenzenty tohoto kurzu patří Alicja Maziarz, John Suru a Teresa Murphy. Chtěli byste si projít své nadcházející články na webu MSDN? Pokud ano, dejte mi řádek na mitchell@4GuysFromRolla.com.