Volba trvalého přihlášení při forms autentizaci v ASP.NET
Při použití forms autentizace, o které jsme již psali, můžeme využít takzvané trvalé přihlášení – systém si uloží potřebné informace o uživateli bezpečně do cookies. Tak můžeme uživateli snadno poskytnout komfort přihlášení a personalizace, jaký znáte například z našeho Interfora, kde se trvalé přihlášení také využívá. V článku dáme uživateli možnost tuto funkci nevyužít a ochránit tak jeho soukromí například v netcafé.
Ačkoli jsme o použití cookies v ASP.NET již psali, v tomto příkladu nám znalosti použití cookies k užitku příliš nebudou – na Intervalu již popsaná forms autentizace totiž disponuje vlastním mechanismem pro trvalé přihlášení. Stačí nastavit potřebné vlastnosti a trvalé přihlášení je funkční, samozřejmě pokud klient podporuje cookies. Možnost volby trvalého přihlášení si můžete vyzkoušet v Interforu. Soubory zde popsaného příkladu si můžete stáhnout (zdrojový kód).
Naše ukázka se bude dosti podobat příkladu popsaném v článku o forms autentizaci, proto jen zopakuji základní prinicip. Forms autentizace využívá zvlášť připravené metody pro forms autentizaci. Tyto řeší zobrazení přihlašovacího formuláře (stránky s formulářem) a automatický návrat (přesměrování) na stránku, na které byl vyvolán požadavek na autentizaci uživatele. Teoreticky tak můžeme libovolnou aplikaci, kterou již používáme s anonymním přístupem, pouhým nastavením ve Web.config a přidáním stránky s přihlašovacím formulářem rozšířit na aplikaci s přístupem po autentizaci. Uživatelské účty a hesla (tzv. credentials) jsou uloženy v konfiguračním souboru aplikace Web.config. Hesla jednotlivých uživatelů jsou v našem případě uložena v čisté podobě, díky nastavení passwordFormat=“Clear“ v elementu credentials. Další možné varianty jsou v podobě otisku MD5 nebo SHA1. Nejsou-li povolené sessions (tzv. session state), autentizace nebude pracovat. Je třeba upozornit, že typ autentizace je možné nastavit jen na nejvyšší úrovně aplikace – tedy v Machine.config nebo ve Web.config v kořeni virtuální aplikace IIS. Potřebujeme-li mít na serveru aplikace přístupné po autentizaci a současně s anonymním přístupem, je třeba vytvořit zvláštní virtuální aplikaci – obojí provoz najednou není možný. Pokud se pokusíme nastavit typ autentizace mimo kořen aplikace (například ve Web.config v podadresáři), dojde k chybě aplikace, jak ukazuje následující obrázek:
Chyba konfigurace (plná velikost, cca 25 kB)
Pro kompletní zopakování forms autentizace ještě ukázka definice uživatelských účtů ve Web.config:
<configuration>
<system.web>
<authentication mode=“Forms“>
<forms name=“AuthCookie“ loginUrl=“Login.aspx“ protection=“All“ timeout=“30″ path=“/“>
<credentials passwordFormat=“Clear“>
<user name=“houba“ password=“autobus“ />
<user name=“strom“ password=“tramvaj“ />
</credentials>
</forms>
</authentication>
<authorization> article=1371′ title=’Kopp, Ondřej: Jak zabezpečit aplikace v ASP.NET, 2. díl‘
<deny users=“?“ />
</authorization>
</system.web>
</configuration>
Formulář přihlašovací stránky doplníme o zatrhávací políčko, které bude určovat, zda má být přihlášení trvalé – zda při přesměrování na stránku aplikace metodou RedirectFromLoginPage vytvoří takzvaná persistent cookie. Jenom podotýkám, že uvedená metoda je přetížená, a její druhá podoba umožňuje navíc nastavit i cestu (adresář) platnosti perzistentní cookie.
<%@ Page Language=“C#“ Trace=“False“ Debug=“False“ %>
<%@ Import Namespace=“System.Web.Security“ %>
<script language=“C#“ runat=server>
void Login(Object sender, EventArgs E)
{
if (FormsAuthentication.Authenticate(txbUser.Text,txbPassword.Text))
{
FormsAuthentication.RedirectFromLoginPage(txbUser.Text, chkPersistCookie.Checked);
}
else
{
lblMsg.Text = „Chybné heslo – zadejte znovu prosím“;
}
}
</script>
<html>
<body>
<form RunAt=“server“>
<fieldset>
<legend>Přihlášení<br /></legend>
Uživatel: <asp:TextBox Id=“txbUser“ RunAt=“server“ />
<br />
<asp:RequiredFieldValidator ControlToValidate=“txbUser“ Display=“Dynamic“ ErrorMessage=“Schází uživatelské jméno“ RunAt=“server“ />
<br />
<asp:TextBox Id=“txbPassword“ TextMode=“Password“ RunAt=“server“ />
<br />
<asp:RequiredFieldValidator ControlToValidate=“txbPassword“ Display=“Dynamic“ ErrorMessage=“Schází heslo“ RunAt=“server“ />
<br />
<asp:CheckBox Id=“chkPersistCookie“ RunAt=“server“ Text=“trvalé přihlášení“ />
<br />
<asp:button text=“Přihlásit“ OnClick=“Login“ runat=server/>
<br />
<asp:Label id=“lblMsg“ ForeColor=“red“ RunAt=“server“ />
</fieldset>
</form>
</body>
</html>
To je celé, zbývající části aplikace se nemusejí pro ovládání trvalého přihlášení nijak upravovat. A jako v předchozím článku bychom měli zbývající stránky aplikace doplnit o možnost odhlášení – importujeme prostor názvů System.Web.Security a přidáme tlačítko pro provedení metody SignOut():
<%@ Page Language=“C#“ Trace=“False“ Debug=“False“ %>
<%@ Import Namespace=“System.Web.Security “ %>
<script language=“C#“ runat=server>
void Page_Load(Object Src, EventArgs E )
{
lblUser.Text = „Vítej, “ + User.Identity.Name;
}
void Logout(Object sender, EventArgs E)
{
FormsAuthentication.SignOut();
Response.Redirect(„Login.aspx“,true);
}
</script>
<html>
<body>
<form runat=“server“>
<asp:Label id=“lblUser“ RunAt=“server“ />
<br />
<asp:Button Text=“Odhlásit“ OnClick=“Logout“ RunAt=“server“ />
</form>
</body>
</html>
Odhlašovací část by se vyplatilo zapouzdřit do uživatelského ovládacího prvku nebo jinak provedené společné hlavičky či patičky stránky, čímž se nám kód nejen zpřehlední, ale i usnadní pozdější úpravy aplikace nebo přidání dalších stránek.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Jak zvýšit CTR vašeho e-mail marketingu
9. září 2024 -
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
Aukce CZ domén: Jak vydražit expirovanou CZ doménu?
12. června 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024