Nastavení prostředí
V této lekci se seznámíte s architekturou Identity. Začnete spuštěním skriptu, který nastaví linuxové vývojového prostředí pro tento modul. Tento skript stáhne počáteční multiplatformní projekt a zřídí prostředky Azure pro podporu úkolů v tomto modulu. Do počátečního projektu bude přidána architektura Identity. Předchozí zkušenosti s Linuxem nejsou nutné.
Tento modul se zaměřuje jen na dvě z možných úložišť dat EF Core, která Identity podporuje. Pomocí přepínače nahoře zvolte podle svých preferencí.
Nastavení vývojového prostředí
V příkazovém prostředí spusťte následující příkaz. Tento příkaz se liší podle toho, jaké úložiště dat jste zvolili přepínačem nahoře. Buďte trpěliví, nastavení může trvat několik minut. Během provádění skriptu pokračujte ve čtení.
. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "pg"
. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "sql"
Tip
Tlačítkem Kopírovat si můžete příkazy zkopírovat do schránky. Pokud ho chcete vložit, klikněte pravým tlačítkem myši na nový řádek v okně Cloud Shell a vyberte Vložit nebo použijte klávesovou zkratku SHIFT + INSERT (⌘ + v v MacOS).
Předchozí příkaz načte a spustí instalační skript z úložiště GitHub. Skript provede následující kroky:
- Naklonuje počáteční kód ASP.NET Core z úložiště GitHub.
- Sestaví a nasadí webové rozhraní API ASP.NET Core pro dodání dat do webové aplikace.
- Zřídí databázi pro ukládání entit architektury Identity.
- Nastaví proměnné prostředí, které se pro tento modul vyžadují.
- Zobrazí informace o připojení pro tyto prostředky Azure.
- Spustí editor Cloud Shellu a zobrazí počáteční kód.
Seznámení s architekturou ASP.NET Core Identity
ASP.NET Core Identity je systém členství, který webové uživatelské rozhraní ASP.NET Core doplňuje o možnosti registrace a přihlašování uživatelů. Systém členství se stará jak o ověřování, tak o autorizaci. Ověřování se zabývá tím, kdo jste. Autorizace se zabývá tím, co máte povoleno dělat. Ověřování je proto předpokladem pro autorizaci.
Jako alternativu k vytváření místních účtů podporuje Identity externí zprostředkovatele přihlašování, jako je Facebook nebo Twitter. Relace uživatelů se zachovávají pomocí ověřování založeného na souborech cookie. Standardně se soubor cookie vytvoří při přihlášení a při odhlášení se zničí.
Trvalost dat členství je zajištěna pomocí zvoleného úložiště dat a technologie přístupu k datům. Výchozí technologií přístupu k datům je O/RM (Object-Relational Mapper) s názvem Entity Framework (EF) Core. Výchozím úložištěm dat je SQL Server.
Podrobnosti interakcí s podkladovou databází jsou abstrahovány pomocí EF Core. EF Core tedy obecně umožňuje používat s Identity libovolné ze svých poskytovatelů databází. Poskytovatelé databází jsou k dispozici pro PostgreSQL, SQLite a několik dalších úložišť dat. PostgreSQL je ale poskytovatel třetí strany a nemá proto nárok na podporu od Microsoftu. Flexibilita Identity navíc umožňuje použít technologii přístupu k datům podle vašeho výběru. Jednou z oblíbených alternativ je Dapper.
Následující schéma znázorňuje architekturu Identity použitou v tomto modulu:


V předchozím schématu:
- Aplikace ASP.NET Core Razor Pages představuje webové uživatelské rozhraní, do kterého bude v tomto modulu přidána podpora Identity.
- Vrstva Správce identit obsahuje třídy použité z oboru názvů
Microsoft.AspNetCore.Identity. Příkladem takových tříd explicitně použitých v tomto modulu jsouSignInManager<TUser>aUserManager<TUser>. - Vrstva Úložiště identit EF Core obsahuje třídy z oboru názvů
Microsoft.AspNetCore.Identity.EntityFrameworkCore. Příkladem takové třídy explicitně použité v tomto modulu jeUserStore<TUser>. - Poskytovatel databáze je knihovna specifická pro databázi, která přijímá SQL od poskytovatele EF Core (není na obrázku) a provádí ho.
Kontrola požadavků projektu
Účastníci definovali následující obchodní požadavky:
- V systému jsou dva typy ověřovaných uživatelů: zaměstnanci a správci.
- Anonymní uživatelé si katalog produktů nemohou prohlížet.
- Zaměstnanci mohou katalog produktů jen prohlížet.
- Správci mohou upravovat produkty.
- Po úspěšném přihlášení by se v záhlaví aplikace mělo zobrazit jméno a příjmení uživatele.
Váš vývojový tým udělá následující technická rozhodnutí:
- Data architektury Identity by měla být izolována ve vlastní databázi.
- Databázové tabulky podporující Identity by měly patřit do výchozího schématu.
- Správci se sami zaregistrují pomocí jednorázového tokenu.
- Aplikace musí podporovat přihlášení pomocí vícefaktorové ověřování s využitím ověřovací aplikace pro jednorázová hesla s časovým omezením (TOTP).
- Přihlašovací údaje k databázi by měly být uložené ve službě Azure Key Vault.
Kontrola počátečního kódu
Aplikace se skládá z jednoho projektu ASP.NET Core Razor Pages s názvem ContosoPets.Ui. Tento projekt obsahuje uživatelské rozhraní pro prohlížení a správu produktových dat. Produktová data se získávají přes externí webové rozhraní API ASP.NET Core.
Zvláště zajímavé jsou následující soubory a adresáře v ContosoPets.Ui:
| Název | Popis |
|---|---|
| Controllers/AdminTokenController.cs | Zpřístupňuje AdminRegistrationTokenService jako koncový bod HTTP. Nepoužito až do lekce 6. |
| Pages/Products/ | Obsahuje webové uživatelské rozhraní pro operace CRUD. |
| Services/AdminRegistrationTokenService.cs | Generuje tokeny, které umožňují správcům samoobslužnou registraci. Nepoužito až do lekce 6. |
| Services/ProductService.cs | Spravuje všechny interakce s externím webovým rozhraním API ASP.NET Core. |
| Services/QRCodeService.cs | Spravuje vytváření kódů QR pro podporu vícefaktorového ověřování. Nepoužito až do lekce 5. |
| wwwroot/js/product.js | Umožňuje odstranění produktu z Pages/Products/Index.cshtml bez postbacku na straně serveru. |
| Program.cs | Slouží jako hlavní vstupní bod aplikace a registruje zprostředkovatele konfigurace Azure Key Vault. |
| Startup.cs | Konfiguruje služby a kanál požadavků HTTP aplikace. |
Poznámka
K bezpečnému ukládání a načítání citlivých dat se používá služba Azure Key Vault. V počátečním kódu je implementovaná a ukazuje jeden možný způsob, jak zabezpečit přihlašovací údaje k databázi. Nesouvisí s architekturou Identity a je proto nad rámec tohoto modulu. Registrační kód trezoru klíčů najdete v metodě ConfigureKeyVault v souboru Program.cs.
Ověření připojení k databázi
Spusťte následující příkaz:
db -c "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'"
Skript vytvořil alias db. Tento alias odpovídá příkazu psql s parametry --host (název hostitele serveru), --port (číslo portu), --username a --dbname (název databáze). psql získává heslo z proměnné prostředí s názvem PGPASSWORD. PSQL je multiplatformní nástroj příkazového řádku pro správu a dotazování databází PostgreSQL. Předchozí příkaz načte seznam nesystémových tabulek z dříve vytvořené databáze PostgreSQL.
Seznam je podle očekávání prázdný, protože databáze obsahuje jen systémové tabulky.
tablename
-----------
(0 rows)
db -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbo' ORDER BY TABLE_NAME" -Y 25
Skript vytvořil alias db. Tento alias odpovídá příkazu sqlcmd s možnostmi -U (uživatelské jméno), -P (heslo), -S (název hostitele serveru) a -d (název databáze). sqlcmd je multiplatformní nástroj příkazového řádku pro správu a dotazování databází SQL Serveru. Předchozí příkaz načte seznam nesystémových tabulek z Azure SQL Database, která byla vytvořena dříve.
Seznam je podle očekávání prázdný, protože ve schématu dbo databáze nejsou žádné tabulky.
TABLE_NAME
-------------------------
(0 rows affected)
Potřebujete pomoc? Projděte si našeho průvodce odstraňováním potíží nebo nahlaste potíže a uveďte konkrétní připomínky.