reklama

Začínáme s ASP.NET 2.0 – 9. díl – autentizace, autorizace

V dnešním předposledním díle se pro změnu budeme věnovat zabezpečení webu pro různé uživatele. V první části se budeme věnovat autentizaci – v našem případě přihlášení uživatele jménem a heslem. Ve druhé části se zaměříme na autorizaci – v našem případě nastavení přístupu uživatelů k jednotlivým stránkám webu.

Autentizace

Autentizace je proces, při kterém má přistupující uživatel prokázat, že je tím, za koho se vydává. Nejčastěji to bývá prokázání znalosti jména a hesla anebo předložení certifikátu. U webových aplikací v ASP.NET se pro autentizaci používají zpravidla dva mechanismy.

U intranetových aplikací se pro přihlášení používají většinou účty, kterými se uživatelé přihlašují do síťového prostředí. Na platformě Windows jde o účty ve Windows doméně, kterými se uživatelé přihlašují „při příchodu do práce“ a dále se tento účet víceméně bez vědomí uživatele používá pro přístup ke všem dalším zdrojům v síti – mluvíme o tzv. integrované autentizaci, v ASP.NET se označuje jako Windows autentizace.

Druhý mechanismus je typicky používán u aplikací na Internetu. Při tomto způsobu jsou jména a hesla uživatelů uložena v rámci aplikace, zpravidla v relační databázi. Při přihlašování pak uživatel musí vyplnit formulář se jménem a heslem, na základě kterého se pak rozhoduje o jeho přihlášení, přičemž přihlašovací jméno se mezi jednotlivými stránkami uchovává většinou v podepsaném řetězci cookie. Tento způsob se v ASP.NET nazývá Forms autentizace a budeme jej používat v našich experimentech.

Definice uživatelských účtů

Pro používání Forms autentizace musíme nejprve vytvořit tabulku v databázi a vložit do ní data o účtech uživatelů. Pro tuto úlohu je k dispozici konfigurační nástroj, který z VWD spustíme nabídkou Website/ASP.NET Configuration a přepneme na záložku Security. Jak vidíme, web je nyní nastaven na používání Windows autentizace. Přepnutí na Forms autentizaci provedeme volbou Select authentication type a zvolíme možnost From the Internet a potvrdíme Done. Tato akce přidá do konfiguračního souboru web.config řádek:

<authentication mode="Forms" />

a zároveň se ve složce App_Data vytvoří nová databáze SQL Express jménem ASPNETDB.MDF, ve které budou účty ukládány.

V konfigurační aplikaci zároveň přibyly možnosti Create User a Manage Users. Nového uživatele založíme samozřejmě volbou Create User:

Klepněte pro větší obrázek

Jako jméno zadáme karel a jako heslo karel.123, druhého založeného uživatele pojmenujeme marie a přiřadíme mu heslo marie.123.

Vytvoření přihlašovací stránky

Druhým krokem bude vytvoření přihlašovací stránky. Založíme novou stránku Prihlasovani.aspx. Pokud chceme, můžeme zvolit Select master page a založit ji na naší stránce Sablona.master. Na stránku přeneseme z palety nástrojů prvek Login, který udělá veškerou práci za nás. Zobrazíme jeho nabídku smart tag a upravíme vzhled volbou Auto Format... například na vzhled Professional. Pokud chceme, můžeme též počeštit texty ovládacího prvku pomocí vlastností LoginButtonText, PasswordLabelText, RememberMeText, TitleText a UserNameLabelText:

Klepněte pro větší obrázek

Zbývá ještě zaregistrovat naši přihlašovací stránku v konfiguračním souboru web.config, což provedeme nahrazením původního řádku:

<authentication mode="Forms"/>

opravenou verzí

<authentication mode="Forms">
  <forms loginUrl="~/Prihlaseni.aspx"/>
</authentication>

Stránku si nyní můžeme zobrazit v prohlížeči. Pokud zadáme neplatné jméno a heslo, dostaneme po stisknutí tlačítka chybové hlášení o neplatných přihlašovacích údajích. Po zadání správných přihlašovacích údajů dojde k přesměrování na stránku default.aspx.

Ovládací prvky pro přihlašování

Na závěr první části zakomponujeme přihlašování do master stránky Sablona.master. Do levé sekce přeneseme z panelu nástrojů prvek LoginStatus, který slouží k provedení přihlášení a odhlášení uživatele, můžeme ho počeštit nastavením vlastností LoginText a LogoutText na Přihlásit a Odhlásit.

Nad něj můžeme z panelu nástrojů přesunout prvek LoginView, který zobrazuje různý text v závislosti na tom, zda uživatel je či není přihlášen. K tomu slouží šablony AnonymousTemplate a LoggedInTemplate, mezi kterými můžete přepínat pomocí smart tagu a do kterých můžeme přímo vepisovat text anebo přenášet ovládací prvky podobně jako na stránku. Prvek standardně zobrazuje anonymní šablonu, takže můžeme vepsat například Nikdo není přihlášen. Pomocí smart tagu přepneme do zobrazení LoggedInTemplate, vepíšeme text Přihlášen jako a myší přetáhneme za tento text prvek LoginName, který zobrazuje jméno aktuálně přihlášeného uživatele.

Pokud si teď zobrazíme jakoukoliv stránku používající Sablona.master (např. stránku Ukazka2.aspx), na levé straně uvidíme text Nikdo není přihlášen a odkaz Přihlásit, který nás přenese na přihlašovací stránku. Pokud správně zadáme přihlašovací údaje uživatele karel, jsme přesměrováni zpět na původní stránku. Na levé straně je pak již text Přihlášen jako karel a odkaz se změnil na Odhlásit (viz obrázek), což koneckonců můžeme také vyzkoušet:

Klepněte pro větší obrázek

Pokud chcete sami pokračovat v dalším zkoušení, jsou vám k dispozici další prvky související s autentizací – CreateUserWizard pro samoobslužné vytvoření uživatelského účtu, PasswordRecovery pro objednání zaslání zapomenutého hesla e-mailem a ChangePassword pro změnu hesla k existujícímu účtu.

Autorizace

Přihlášení je pouze prvním krokem, který je sám o sobě málo užitečný. Obvykle na něj navazuje rozlišení uživatelů různými právy pro provádění úkonů nebo prohlížení informací – takzvaná autorizace.

Definice rolí

Protože nastavování práv jednotlivým uživatelům by bylo ve většině případů příliš pracné, používají se pro přiřazování práv tzv. role. Role je ve většině případů pojmenovaná skupina uživatelů, např. manažeři, čtenáři, registrovaní uživatelé, fakturantky, redaktoři apod. Správce systému potom většinou přiřazuje jednotlivé uživatele do rolí, takže například do role redaktoři přiřadí uživatele karel a josef.

Role jsou většinou definovány v jedné databázové tabulce a v druhé databázové tabulce je pak přiřazení uživatelů do těchto rolí. Nejinak je tomu i ve výchozí používané databázi ASPNETDB.MDF, kterou ASP.NET používá jako standardní možnost (kdo nevěří, může se do databáze podívat). Abychom nemuseli vkládat data do tabulky ručně, je práce s rolemi jednou z možností konfiguračního nástroje, který jsme již jednou použili (v nabídce Website/ASP.NET Configuration). V záložce Security stačí kliknout na volbě Enable roles, čímž se do konfiguračního souboru přidá řádek:

<roleManager enabled="true" />

Zároveň se v konfiguračním nástroji objeví možnost Create or Manage Roles, pomocí které lze vytvářet a mazat role a určovat jejich členy. Zvolíme ji tedy a jako název nové role zadáme Dealeři (nejedná se o prodej drog!) a stiskneme Add Role. Po založení role se vedle ní zpřístupní možnost Manage, kterou zvolíme. Prokliknutím All se zobrazí seznam všech uživatelů, kde zaškrtneme pouze uživatele marie – viz obrázek:

Klepněte pro větší obrázek

Takže v roli Dealeři bude pouze marie, ale nikoliv karel.

Nastavení oprávnění

Po vytvoření rolí zbývá nastavit oprávnění pro přístup ke stránkám, přesněji řečeno složkám, ve kterých se stránky nachází. Zvolíme jednoduchý případ. Založíme ve struktuře webu novou složku PouzePrihlaseni, v níž založíme stránku Test.aspx, a dále složku PouzeDealeri, v níž založíme stránku Test.aspx. Obě stránky založíme na naší master stránce Sablona.master a do hlavního regionu (prvku Content1) stránek vepíšeme libovolné texty (např. Tato stránka je určena pouze pro dealery).

Klepněte pro větší obrázek

Jak asi tušíte, ke stránkám ve složce PouzePrihlaseni budou mít přístup pouze přihlášení uživatelé (ale nikoliv nepřihlášený uživatel). Ke stránkám ve složce PouzeDealeri budou mít (překvapivě) přístup pouze uživatelé v roli Dealeři.

Nastavení provedeme opět pomocí přístupových pravidel prostřednictvím konfiguračního nástroje ASP.NET pomocí volby Create access rules na záložce Security, kterou provedeme celkem 3x:

 Select a directory for this rule   Rule applies to  Permission 
 PouzePrihlaseni  Anonymous users   Deny
 PouzeDealeri  Role: Dealeři  Allow
 PouzeDealeri  All users  Deny

Pro prohlížení nastavených práv můžeme použít volbu Manage Access Rules, kterou najdeme rovněž v administrativním nástroji na záložce Security:

Klepněte pro větší obrázek

Pokud nyní v okně Solution Explorer zvolíme Refresh, můžeme si povšimnout, že v těchto složkách vznikly nové konfigurační soubory web.config, které vytvořil konfigurační web. Můžeme si je otevřít, prohlédnout a případně upravit (? znamená anonymního uživatele, * znamená všechny uživatele).

Zabezpečení stránek si můžeme vyzkoušet v prohlížeči. Pokusíme-li se zobrazit stránku ze složky PouzePrihlaseni aniž bychom byli přihlášeni, jsme automaticky přesměrováni na stránku Prihlaseni.aspx. Pokud zadáme jakékoliv platné přihlašovací údaje (karel nebo marie), jsme přesměrování zpátky a zobrazí se požadovaná stránka. Podobně bude vypadat pokus o zobrazení stránky ze složky PouzeDealeri, která se ovšem zobrazí pouze po zadání účtu patřící do role Dealeři (v našem případě pouze marie).

Závěrem

Vyzkoušeli jsme si zabezpečení webu, které sestává ze tří kroků. V prvním jsme zajistili autentizaci uživatelů – v našem případě jménem a heslem. Ve druhém jsme pro snazší správu vytvořili role a přiřadili uživatele do těchto rolí. Ve třetím kroku jsme vytvořili pravidla zpřístupňující nebo zabraňující přístupu jednotlivých rolí ke složkám webu.

A opravdu již naposledy – pokud něco nebude fungovat jak by mělo, zkuste využít možnosti podpory zmíněné ve druhé části, zejména diskusní skupinu microsoft.public.cs.developer.

Témata článku: Software, Windows, Programování, Marie

8 komentářů

Nejnovější komentáře

  • Marťas 18. 12. 2006 20:02:12
    LoginView je perfektní komponenta, akorát nevím, jak se z programu...
  • raddimm 10. 12. 2006 14:44:58
    chm
  • raddimm 10. 12. 2006 14:20:48
    Dobrý den,
    bohužel jsem uplna lama a nerozchodim to ani za boha....
reklama
Určitě si přečtěte

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 100

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 34

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

** Novinka od Asusu míří přímo proti MacBooku od Applu ** Nabídne daleko více výkonu za stejné peníze

2.  12.  2016 | David Polesný | 144

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 73


reklama