Ověřování uživatelů pomocí formulářů (C#)
od Microsoftu
Zjistěte, jak pomocí atributu [Authorize] chránit určité stránky v aplikaci MVC heslem. Naučíte se používat nástroj pro správu webu k vytváření a správě uživatelů a rolí. Dozvíte se také, jak nakonfigurovat, kde se ukládají informace o uživatelských účtech a rolích.
Cílem tohoto kurzu je vysvětlit, jak můžete pomocí ověřování pomocí formulářů chránit zobrazení v aplikacích ASP.NET MVC heslem. Naučíte se používat nástroj pro správu webu k vytváření uživatelů a rolí. Dozvíte se také, jak zabránit neoprávněným uživatelům v vyvolání akcí kontroleru. Nakonec se dozvíte, jak nakonfigurovat, kde se ukládají uživatelská jména a hesla.
Použití nástroje pro správu webu
Než uděláme něco jiného, měli bychom začít vytvořením některých uživatelů a rolí. Nejjednodušší způsob, jak vytvořit nové uživatele a role, je využít nástroj pro správu webu sady Visual Studio 2008. Tento nástroj můžete spustit výběrem možnosti nabídky Projekt, ASP.NET Konfigurace. Případně můžete spustit Nástroj pro správu webu kliknutím na (poněkud děsivou) ikonu kladiva, která se objeví v horní části okna Průzkumník řešení (viz obrázek 1).
Obrázek 1 – Spuštění nástroje pro správu webu
V Nástroji pro správu webu můžete vytvořit nové uživatele a role tak, že vyberete kartu Zabezpečení. Kliknutím na odkaz Vytvořit uživatele vytvořte nového uživatele s názvem Stephen (viz obrázek 2). Zadejte uživateli Stephen libovolné heslo, které chcete (například tajné).
Obrázek 2 – Vytvoření nového uživatele
Nové role vytvoříte tak, že nejprve povolíte role a definujete jednu nebo více rolí. Povolte role kliknutím na odkaz Povolit role . Potom vytvořte roli s názvem Administrators kliknutím na odkaz Vytvořit nebo spravovat role (viz obrázek 3).
Obrázek 3 – Vytvoření nové role
Nakonec vytvořte nového uživatele s názvem Sally a přidružte Sally k roli Administrators kliknutím na odkaz Vytvořit uživatele a výběrem možnosti Správci při vytváření Sally (viz obrázek 4).
Obrázek 4 – Přidání uživatele k roli
Až bude všechno řečeno a hotovo, měli byste mít dva nové uživatele jménem Stephen a Sally. Měli byste také mít novou roli s názvem Správci. Sally je členem role Administrators a Stephen ne.
Vyžadování autorizace
Před vyvoláním akce kontroleru můžete vyžadovat ověření uživatele přidáním atributu [Authorize] do akce. Atribut [Authorize] můžete použít na akci jednotlivého kontroleru nebo můžete tento atribut použít pro celou třídu kontroleru.
Například kontroler v seznamu 1 zveřejňuje akci s názvem CompanySecrets(). Vzhledem k tomu, že tato akce je opatřena atributem [Authorize], nelze tuto akci vyvolat, pokud není uživatel ověřený.
Výpis 1 – Controllers\HomeController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
}
}
Pokud vyvoláte akci CompanySecrets() zadáním adresy URL /Home/CompanySecrets do adresního řádku prohlížeče a nejste ověřený uživatel, budete automaticky přesměrováni do zobrazení Přihlášení (viz obrázek 5).
Obrázek 5 – Zobrazení přihlášení
Pomocí zobrazení Přihlášení můžete zadat svoje uživatelské jméno a heslo. Pokud nejste registrovaným uživatelem, můžete kliknutím na odkaz zaregistrovat přejít do zobrazení Registrace (viz obrázek 6). K vytvoření nového uživatelského účtu můžete použít zobrazení Zaregistrovat.
Obrázek 6 – Zobrazení Registrace
Po úspěšném přihlášení uvidíte zobrazení CompanySecrets (viz obrázek 7). Ve výchozím nastavení budete dál přihlášeni, dokud nezavřete okno prohlížeče.
Obrázek 7 – Zobrazení CompanySecrets
Autorizace podle uživatelského jména nebo role uživatele
Atribut [Authorize] můžete použít k omezení přístupu k akci kontroleru na konkrétní sadu uživatelů nebo konkrétní sadu uživatelských rolí. Například upravený domovský kontroler v seznamu 2 obsahuje dvě nové akce s názvem StephenSecrets() a AdministratorSecrets().
Výpis 2 – Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
[Authorize(Users="Stephen")]
public ActionResult StephenSecrets()
{
return View();
}
[Authorize(Roles = "Administrators")]
public ActionResult AdministratorSecrets()
{
return View();
}
}
}
Akci StephenSecrets() může vyvolat pouze uživatel s uživatelským jménem Stephen. Všichni ostatní uživatelé se přesměrují do zobrazení Přihlášení. Vlastnost Users přijímá seznam názvů uživatelských účtů oddělený čárkami.
Akci AdministratorSecrets() můžou vyvolat jenom uživatelé s rolí Správci. Protože je například Sally členem skupiny Administrators, může vyvolat akci AdministratorSecrets(). Všichni ostatní uživatelé se přesměrují do zobrazení Přihlášení. Vlastnost Role přijímá seznam názvů rolí oddělený čárkami.
Konfigurace ověřování
V tuto chvíli vás možná zajímá, kam se ukládají informace o uživatelském účtu a roli. Ve výchozím nastavení se informace ukládají do databáze SQL Express (RANU) s názvem ASPNETDB.mdf, která se nachází ve složce App_Data vaší aplikace MVC. Tato databáze je generována rozhraním ASP.NET automaticky, když začnete používat členství.
Chcete-li zobrazit databázi ASPNETDB.mdf v okně Průzkumník řešení, musíte nejprve vybrat možnost nabídky Projekt, Zobrazit všechny soubory.
Použití výchozí databáze SQL Express je při vývoji aplikace v pořádku. S největší pravděpodobností ale nebudete chtít použít výchozí databázi ASPNETDB.mdf pro produkční aplikaci. V takovém případě můžete změnit umístění, kde se ukládají informace o uživatelských účtech, a to provedením následujících dvou kroků:
- Přidání databázových objektů aplikačních služeb do produkční databáze – Změňte připojovací řetězec aplikace tak, aby ukazoval na produkční databázi.
Prvním krokem je přidání všech potřebných databázových objektů (tabulek a uložených procedur) do produkční databáze. Nejjednodušším způsobem, jak přidat tyto objekty do nové databáze, je využít průvodce nastavením ASP.NET SQL Server (viz obrázek 8). Tento nástroj můžete spustit otevřením příkazového řádku sady Visual Studio 2008 z programové skupiny Microsoft Visual Studio 2008 a spuštěním následujícího příkazu z příkazového řádku:
aspnet_regsql
Obrázek 8 – Průvodce nastavením ASP.NET SQL Server
Průvodce instalací ASP.NET SQL Server umožňuje vybrat databázi SQL Server v síti a nainstalovat všechny databázové objekty vyžadované ASP.NET aplikačními službami. Databázový server nemusí být umístěný na místním počítači.
Poznámka
Pokud nechcete používat průvodce instalací ASP.NET SQL Server, najdete skripty SQL pro přidání databázových objektů aplikačních služeb v následující složce:
C:\Windows\Microsoft.NET\Framework\v2.0.50727
Po vytvoření potřebných databázových objektů musíte upravit připojení k databázi používané vaší aplikací MVC. Upravte připojovací řetězec ApplicationServices v souboru webové konfigurace (web.config) tak, aby odkazovat na produkční databázi. Například upravené připojení ve výpisu 3 odkazuje na databázi s názvem MyProductionDB (původní připojovací řetězec ApplicationServices byl zakomentován).
Výpis 3 – Web.config
<connectionStrings>
<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>
Konfigurace oprávnění databáze
Pokud se k databázi připojujete pomocí integrovaného zabezpečení, budete muset jako přihlášení k databázi přidat správný uživatelský účet systému Windows. Správný účet závisí na tom, jestli jako webový server používáte ASP.NET Vývojový server nebo Internetovou informační službu. Správný uživatelský účet také závisí na vašem operačním systému.
Pokud používáte ASP.NET Development Server (výchozí webový server používaný sadou Visual Studio), spustí se aplikace v kontextu uživatelského účtu systému Windows. V takovém případě musíte přidat svůj uživatelský účet Systému Windows jako přihlášení k databázovému serveru.
Případně pokud používáte Internetovou informační službu, musíte jako přihlášení k databázovému serveru přidat buď účet ASPNET, nebo účet NT AUTHORITY/NETWORK SERVICE. Pokud používáte Windows XP, přidejte účet ASPNET jako přihlášení k databázi. Pokud používáte novější operační systém, například Windows Vista nebo Windows Server 2008, přidejte účet NT AUTHORITY/NETWORK SERVICE jako přihlášení k databázi.
Nový uživatelský účet můžete do databáze přidat pomocí Microsoft SQL Server Management Studio (viz Obrázek 9).
Obrázek 9 – Vytvoření nového přihlášení k Microsoftu SQL Server
Po vytvoření požadovaného přihlášení je potřeba namapovat přihlášení na uživatele databáze se správnými databázovými rolemi. Poklikejte na přihlašovací jméno a vyberte kartu Mapování uživatelů. Vyberte jednu nebo více databázových rolí aplikačních služeb. Pokud chcete například ověřovat uživatele, musíte povolit roli aspnet_Membership_BasicAccess databáze. Abyste mohli vytvářet nové uživatele, musíte povolit roli aspnet_Membership_FullAccess databáze (viz obrázek 10).
Obrázek 10 – Přidání databázových rolí aplikačních služeb
Souhrn
V tomto kurzu jste se naučili používat ověřování pomocí formulářů při sestavování aplikace ASP.NET MVC. Nejprve jste se dozvěděli, jak vytvářet nové uživatele a role pomocí nástroje pro správu webu. Dále jste zjistili, jak pomocí atributu [Authorize] zabránit neoprávněným uživatelům v vyvolání akcí kontroleru. Nakonec jste se dozvěděli, jak nakonfigurovat aplikaci MVC pro ukládání informací o uživatelích a rolích do produkční databáze.