Úvod do ASP.NET Identity
Systém členství ASP.NET byl zaveden s ASP.NET 2.0 zpět v roce 2005 a od té doby došlo k mnoha změnám ve způsobech, jak webové aplikace obvykle zpracovávají ověřování a autorizaci. ASP.NET Identita je čerstvý pohled na to, co by měl být systém členství při vytváření moderních aplikací pro web, telefon nebo tablet.
Doporučujeme použít nejbezpečnější zabezpečenou možnost ověřování. Informace o aplikacích .NET nasazených do Azure najdete tady:
Azure Key Vault a .NET Aspire poskytují nejbezpečnější způsob ukládání a načítání tajných kódů. Azure Key Vault je cloudová služba, která chrání šifrovací klíče a tajné kódy, jako jsou certifikáty, připojovací řetězce a hesla. Informace o rozhraní .NET Aspire najdete v tématu Zabezpečená komunikace mezi hostování a integracemi klientů.
Vyhněte se použití Resource Owner Password Credentials Grant, protože:
- Zpřístupní heslo uživatele klientovi.
- Jedná se o významné bezpečnostní riziko.
- Mělo by se použít jenom v případě, že jiné toky ověřování nejsou možné.
Když je aplikace nasazená na testovací server, můžete proměnnou prostředí použít k nastavení připojovacího řetězce na testovací databázový server. Proměnné prostředí jsou obecně uložené ve formátu prostého a nešifrovaného textu. Pokud dojde k ohrožení zabezpečení počítače nebo procesu, můžou k proměnným prostředí přistupovat nedůvěryhodné strany. Nedoporučujeme používat proměnné prostředí k uložení produkčního připojovacího řetězce, protože se nejedná o nejbezpečnější přístup.
Pokyny pro konfigurační data:
- Nikdy neukládejte hesla ani jiná citlivá data v kódu zprostředkovatele konfigurace nebo v konfiguračních souborech prostého textu.
- Nepoužívejte produkční tajné kódy ve vývojových nebo testovacích prostředích.
- Zadejte tajemství mimo rámec projektu, aby nemohly být omylem potvrzeny do úložiště zdrojového kódu.
Pozadí: Členství v ASP.NET
Členství v ASP.NET
ASP.NET členství byl navržen tak, aby vyřešil požadavky na členství na webu, které byly v roce 2005 společné, což zahrnovalo ověřování formulářů a databázi SQL Serveru pro uživatelská jména, hesla a profilová data. Dnes existuje mnohem širší škála možností úložiště dat pro webové aplikace a většina vývojářů chce svým webům umožnit použití zprostředkovatelů sociálních identit pro ověřování a autorizaci. Omezení návrhu ASP.NET členství ztěžují tento přechod:
- Schéma databáze bylo navržené pro SQL Server a nemůžete ho změnit. Můžete přidat informace o profilu, ale další data se zabalí do jiné tabulky, což ztěžuje přístup jakýmkoli způsobem s výjimkou rozhraní API zprostředkovatele profilu.
- Systém zprostředkovatele umožňuje změnit záložní úložiště dat, ale systém je navržený podle předpokladů vhodných pro relační databázi. Můžete vytvořit poskytovatele, který bude ukládat informace o členství v nerelačním mechanismu úložiště, jako jsou tabulky Azure Storage. Pak však musíte obejít relační návrh složitým kódem a mnoha výjimkami typu
System.NotImplementedException
pro metody, které se nevztahují na databáze NoSQL. - Vzhledem k tomu, že funkce přihlášení/odhlášení je založená na ověřování pomocí formulářů, systém členství nemůže používat OWIN. OWIN obsahuje komponenty middlewaru pro ověřování, včetně podpory přihlašování pomocí externích zprostředkovatelů identity (jako jsou účty Microsoft, Facebook, Google, Twitter) a přihlášení pomocí účtů organizace z místní služby Active Directory nebo Azure Active Directory. OWIN také zahrnuje podporu pro OAuth 2.0, JWT a CORS.
ASP.NET jednoduché členství
ASP.NET jednoduché členství bylo vyvinuto jako systém členství pro webové stránky ASP.NET. Byla vydána s webMatrixem a sadou Visual Studio 2010 SP1. Cílem jednoduchého členství bylo usnadnit přidávání funkcí členství do aplikace webových stránek.
Jednoduché členství usnadnilo přizpůsobení informací o profilu uživatele, ale přesto sdílí ostatní problémy s ASP.NET členstvím a má určitá omezení:
- Bylo obtížné zachovat data systému členství v nerelačním úložišti.
- Nemůžete ho použít s OWIN.
- Nefunguje dobře se stávajícími poskytovateli členství ASP.NET a není rozšiřitelný.
ASP.NET Univerzální zprostředkovatelé
ASP.NET Univerzální Poskytovatelé byly vyvinuty pro umožnění uchovávání informací o členství v Microsoft Azure SQL Database a pracují také s SQL Server Compact. Univerzální zprostředkovatelé byli vytvořeni pomocí Entity Framework Code First, což znamená, že Univerzální zprostředkovatelé lze použít k uchování dat v jakémkoli úložišti podporovaném EF. U univerzálních poskytovatelů se schéma databáze vyčistilo poměrně hodně.
Univerzální poskytovatelé jsou postaveni na infrastruktuře ASP.NET členství, takže stále mají stejná omezení jako poskytovatel SqlMembership. To znamená, že byly navrženy pro relační databáze a je obtížné přizpůsobit profilové a uživatelské informace. Tito zprostředkovatelé stále používají ověřování pomocí formulářů pro funkce přihlášení a odhlášení.
ASP.NET Identity
Vzhledem k tomu, že se příběh o členství v ASP.NET v průběhu let vyvinul, tým ASP.NET se hodně naučil od zpětné vazby od zákazníků.
Předpoklad, že se uživatelé budou přihlašovat zadáním uživatelského jména a hesla, které zaregistrovali ve vaší vlastní aplikaci, už nejsou platné. Web se stal sociálnějším. Uživatelé vzájemně komunikují v reálném čase prostřednictvím sociálních kanálů, jako je Facebook, Twitter a další sociální weby. Vývojáři chtějí, aby se uživatelé mohli přihlásit pomocí svých sociálních identit, aby mohli mít bohaté prostředí na svých webech. Moderní systém členství musí povolit přihlášení založená na přesměrování na zprostředkovatele ověřování, jako je Facebook, Twitter a další.
Jak se vývoj webů vyvíjí, tak i vzory vývoje webu. Testování jednotek kódu aplikace se stalo základním zájmem vývojářů aplikací. V roce 2008 ASP.NET přidali novou architekturu založenou na modelu model-View-Controller (MVC) a pomohli vývojářům vytvářet testovatelné jednotky ASP.NET aplikace. Vývojáři, kteří chtěli testovat logiku aplikace, chtěli být také schopni to udělat se systémem členství.
Vzhledem k těmto změnám vývoje webových aplikací byla ASP.NET Identita vyvinuta s následujícími cíli:
Jeden systém identit ASP.NET
- ASP.NET Identity lze použít se všemi ASP.NET architekturami, jako jsou ASP.NET MVC, webové formuláře, webové stránky, webové rozhraní API a signalR.
- ASP.NET Identita se dá použít při vytváření webových, telefonních, storech nebo hybridních aplikací.
Snadné zadání profilových dat o uživateli
- Máte kontrolu nad schématem informací o uživateli a profilu. Systém můžete například snadno povolit ukládání dat narození zadaných uživateli při registraci účtu ve vaší aplikaci.
Kontrola trvalosti
- Ve výchozím nastavení systém identit ASP.NET ukládá všechny informace o uživateli do databáze. ASP.NET Identita implementuje veškerý mechanismus trvalosti pomocí kódu Entity Framework First.
- Vzhledem k tomu, že řídíte schéma databáze, běžné úlohy, jako je změna názvů tabulek nebo změna datového typu primárních klíčů, je jednoduché.
- Je snadné připojit různé mechanismy úložiště, jako je SharePoint, Azure Storage Table Service, databáze NoSQL atd., aniž byste museli vyvolat
System.NotImplementedExceptions
výjimky.
Testovatelnost jednotek
- ASP.NET Identity zajistí, že webová aplikace bude testovatelnější. Testy jednotek můžete psát pro části aplikace, které používají ASP.NET Identity.
poskytovatel rolí
- Existuje zprostředkovatel rolí, který umožňuje omezit přístup k částem aplikace podle rolí. Můžete snadno vytvářet role, jako je správce, a přidávat uživatele do rolí.
založený na tvrzeních
- ASP.NET Identity podporuje ověřování na základě deklarací identity, kde je identita uživatele reprezentována jako sada deklarací identity. Deklarace identity umožňují vývojářům vyjádřit mnohem výraznější popis identity uživatele než role. Zatímco členství v roli je jen logická hodnota (člen nebo nečlen), tvrzení může obsahovat bohaté informace o identitě uživatele a jeho členství.
zprostředkovatelé sociálních přihlášení
- Do aplikace můžete snadno přidávat sociální protokoly, jako je účet Microsoft, Facebook, Twitter, Google a další, a ukládat data specifická pro uživatele ve vaší aplikaci.
integrace OWIN
- ASP.NET ověřování je teď založené na middlewaru OWIN, který je možné použít na jakémkoli hostiteli založeném na OWIN. ASP.NET Identity nemá žádnou závislost na system.web. Jedná se o plně kompatibilní architekturu OWIN a lze ji použít v libovolné hostované aplikaci OWIN.
- ASP.NET Identita používá ověřování OWIN pro přihlášení a odhlášení uživatelů na webu. To znamená, že místo použití FormsAuthentication k vygenerování souboru cookie aplikace k tomu používá OWIN CookieAuthentication.
balíček NuGet
- ASP.NET Identity se redistribuuje jako balíček NuGet, který je nainstalovaný v šablonách ASP.NET MVC, webových formulářů a webových rozhraní API, které jsou součástí sady Visual Studio 2017. Tento balíček NuGet si můžete stáhnout z galerie NuGet.
- Vydání ASP.NET Identity jako balíčku NuGet usnadňuje ASP.NET týmu iterovat nové funkce a opravy chyb a poskytovat je vývojářům agilním způsobem.
Začněte s ASP.NET Identity
ASP.NET Identity se používá v šablonách projektů sady Visual Studio 2017 pro ASP.NET MVC, webové formuláře, webové rozhraní API a SPA. V tomto názorném postupu si ukážeme, jak šablony projektů používají ASP.NET Identity k přidání funkcí pro registraci, přihlášení a odhlášení uživatele.
ASP.NET Identity se implementuje pomocí následujícího postupu. Účelem tohoto článku je poskytnout vám obecný přehled ASP.NET Identity; můžete ho provést krok za krokem nebo si jen přečíst podrobnosti. Podrobnější pokyny k vytváření aplikací pomocí ASP.NET Identity, včetně použití nového rozhraní API pro přidání uživatelů, rolí a informací o profilu, najdete v části Další kroky na konci tohoto článku.
Vytvořte aplikaci ASP.NET MVC s individuálními účty. Identitu ASP.NET můžete použít v ASP.NET MVC, webových formulářích, webovém rozhraní API, knihovně SignalR atd. V tomto článku začneme s aplikací ASP.NET MVC.
Vytvořený projekt obsahuje následující tři balíčky pro ASP.NET Identity.
Microsoft.AspNet.Identity.EntityFramework
Tento balíček obsahuje implementaci entity Framework ASP.NET Identity, která bude uchovávat data a schéma ASP.NET Identity na SQL Serveru.Microsoft.AspNet.Identity.Core
Tento balíček má základní rozhraní pro ASP.NET Identity. Tento balíček lze použít k zápisu implementace pro ASP.NET Identity, která cílí na různá úložiště trvalosti, jako jsou Azure Table Storage, databáze NoSQL atd.Microsoft.AspNet.Identity.OWIN
Tento balíček obsahuje funkce, které slouží k připojení ověřování OWIN pomocí ASP.NET Identity v aplikacích ASP.NET. Používá se při přidávání funkcí přihlášení do aplikace a volání middlewaru OWIN Cookie Authentication k vygenerování souboru cookie.
Vytvoření uživatele
Spusťte aplikaci a kliknutím na odkaz Zaregistrovat vytvořte uživatele. Následující obrázek ukazuje stránku Zaregistrovat, která shromažďuje uživatelské jméno a heslo.Když uživatel vybere tlačítko Zaregistrovat,
Register
akce kontroleru účtu vytvoří uživatele zavoláním rozhraní API pro ASP.NET identity, jak je zvýrazněno níže:[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.UserName }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
Přihlásit se.
Pokud se uživatel úspěšně vytvořil, přihlásí se metodouSignInAsync
.[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return RedirectToAction("Index", "Home"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
Metoda
SignInManager.SignInAsync
vygeneruje ClaimsIdentity. Vzhledem k tomu, že ASP.NET Identity a ověřování souborů cookie OWIN jsou systém založený na deklaracích, architektura vyžaduje, aby aplikace vygenerovala uživatelský ClaimsIdentity. ClaimsIdentity obsahuje informace o všech deklarací identity pro uživatele, například o rolích, ke které uživatel patří.Odhlaste se.
Vyberte odkaz Odhlásit se pro spuštění akce LogOff v řadiči účtu.// POST: /Account/LogOff [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { AuthenticationManager.SignOut(); return RedirectToAction("Index", "Home"); }
Zvýrazněný kód výše ukazuje metodu
AuthenticationManager.SignOut
OWIN. Je to podobné metodě FormsAuthentication.SignOut, kterou používá modul FormsAuthentication ve webových formulářích.
Komponenty ASP.NET Identity
Následující diagram znázorňuje komponenty systému ASP.NET Identity (klikněte na toto nebo na diagram pro zvětšení). Balíčky zeleně tvoří systém ASP.NET Identity. Všechny ostatní balíčky jsou závislosti, které jsou potřeba k použití systému ASP.NET Identity v aplikacích ASP.NET.
Následuje stručný popis balíčků NuGet, které nebyly zmíněny dříve:
-
Microsoft.Owin.Security.Cookies
Middleware, který aplikaci umožňuje používat ověřování na základě souborů cookie, podobně jako ověřování formulářů v ASP.NET. -
EntityFramework
Entity Framework je doporučená technologie přístupu k datům od Microsoftu pro relační databáze.
Migrace z členství na identitu ASP.NET
Doufáme, že brzy poskytneme pokyny k migraci stávajících aplikací, které používají ASP.NET Členství nebo Jednoduché členství do nového systému identit ASP.NET.
Další kroky
-
vytvoření aplikace ASP.NET MVC 5 s Facebookem a Google OAuth2 a přihlášením OpenID
Tento kurz používá rozhraní API pro ASP.NET identity k přidání profilových informací do uživatelské databáze a ověření pomocí Google a Facebooku. -
vytvoření aplikace ASP.NET MVC s ověřováním a databází SQL a nasazením do služby Azure App Service
V tomto kurzu se dozvíte, jak pomocí rozhraní API identity přidat uživatele a role. - https://github.com/rustd/AspnetIdentitySample
Ukázková aplikace, která ukazuje, jak přidat základní role a podporu uživatelů a jak provádět role a správu uživatelů.