Cvičení – konfigurace podpory architektury Identity
Architektura Identity funguje hned a bez jakýchkoli přizpůsobení. V této lekci se identita přidá do existujícího projektu ASP.NET Core Razor Pages.
Získání a otevření počátečního projektu
Poznámka
Pokud chcete použít .devcontainer v GitHub Codespaces, přejděte do codespaces pro úložiště MicrosoftDocs/mslearn-secure-aspnet-core-identity . Vytvořte nový codespace pomocí main
větve a pak přejděte ke kroku 3.
Spuštěním následujícího příkazu v okně terminálu získejte počáteční projekt:
git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
Přepněte do adresáře zdrojového kódu a spusťte Visual Studio Code:
cd mslearn-secure-aspnet-core-identity code .
Otevře se Visual Studio Code. Přijměte všechny výzvy k instalaci doporučených rozšíření nebo vyberte Znovu otevřít v kontejneru , pokud chcete použít .devcontainer.
Tip
Pokud promeškáte výzvu k opětovnému otevření v kontejneru, stisknutím klávesy Ctrl+Shift+P otevřete paletu příkazů a pak vyhledejte a vyberte Dev Containers: Znovu otevřít v kontejneru.
Po načtení projektu (místně nebo v kontejneru) otevřete stisknutím klávesy Ctrl+Shift+` nové podokno terminálu.
V novém podokně terminálu nastavte umístění na adresář RazorPagesPizza :
cd RazorPagesPizza
V podokně Průzkumník rozbalte adresář RazorPagesPizza a zobrazte kód. RazorPagesPizza je adresář projektu. Při dalším postupu předpokládejme, že všechny cesty probírané v tomto modulu jsou relativní k tomuto umístění.
Prozkoumání aplikace
Pojďme aplikaci spustit, abychom získali rychlý úvod.
V podokně terminálu sestavte projekt a spusťte aplikaci:
dotnet run
Poznamenejte si adresu URL zobrazenou ve výstupu terminálu. Například,
https://localhost:7192
.Otevřete aplikaci v prohlížeči tak, že vyberete adresu URL stisknutím klávesy Ctrl+.
Důležité
Pokud v Dockeru používáte .devcontainer , nebude váš prohlížeč důvěřovat certifikátu SSL z kontejneru. Pokud chcete zobrazit webovou aplikaci, musíte udělat jednu z těchto věcí:
- Chybu certifikátu ignorujte. Pokud používáte Microsoft Edge, vyberte Upřesnit a Pokračovat na localhost (nedoporučuje se). Podrobnosti se liší podle prohlížeče.
- Uložte certifikát a přidejte ho do důvěryhodných certifikačních autorit.
- Importujte existující vývojový certifikát uvnitř kontejneru. Další informace najdete v generovaných komentářích v souboru ./devcontainer/devcontainter.json.
Pokud se rozhodnete importovat existující vývojový certifikát uvnitř kontejneru, cesta ke kontejneru /root/.aspnet/ se zobrazí jako .devcontainer/persisted-data/.aspnet mimo kontejner. To je pro vaše pohodlí.
Pokud používáte .devcontainer v GitHub Codespaces, nevyžaduje se žádná akce. Codespaces automaticky zpracovává připojení SSL proxy serveru.
Prozkoumejte webovou aplikaci v prohlížeči. Použití odkazů v záhlaví:
- Přejít na seznam pizzy
- Přejít zpět na domovskou stránku
Všimněte si, že se nemusíte ověřovat.
Aplikaci zastavíte stisknutím Klávesy Ctrl+C v podokně terminálu.
Přidání ASP.NET Core Identity do projektu
Výchozí implementaci identity je možné přidat pomocí dotnet
nástrojů příkazového řádku.
Nainstalujte generátor kódu ASP.NET Core:
dotnet tool install dotnet-aspnet-codegenerator --version 6.0.2 --global
Scaffolder je nástroj .NET Core, který:
- Slouží k přidání výchozích komponent identity do projektu.
- Povolí přizpůsobení komponent uživatelského rozhraní identity v další lekci.
- Je vyvolána prostřednictvím v
dotnet aspnet-codegenerator
tomto modulu.
Přidejte do projektu následující balíčky NuGet:
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 6.0.2 dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 6.0.3 dotnet add package Microsoft.AspNetCore.Identity.UI --version 6.0.3 dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.3 dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 6.0.3
Tyto balíčky nainstalují šablony a závislosti generování kódu, které generátor kódu používá.
Tip
Dostupné generátory zobrazíte takto:
- V příkazovém prostředí spusťte
dotnet aspnet-codegenerator -h
. - V sadě Visual Studio klikněte v Průzkumníku řešení pravým tlačítkem na projekt a vyberte Přidat>Nová vygenerovaná položka.
- V příkazovém prostředí spusťte
Použijte generátor kódu k přidání výchozích komponent Identity do projektu. V terminálu spusťte následující příkaz:
dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth
V předcházejícím příkazu:
- Generátor identifikovaný jako
identity
slouží k přidání architektury Identity do projektu. - Možnost
--useDefaultUI
označuje, že se používá knihovna tříd Razor (RCL) obsahující výchozí prvky uživatelského rozhraní. Bootstrap se používá ke stylu komponent. - Možnost
--dbContext
určuje název třídy kontextu databáze EF Core, která se má vygenerovat.
V adresáři RazorPagesPizza se zobrazí následující Areas adresářová struktura:
- Areas
- Identity (zobrazí se na stejném řádku jako Oblasti)
- Data
- RazorPagesPizzaAuth.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity (zobrazí se na stejném řádku jako Oblasti)
Tip
Pokud se Areas adresář nezobrazí v podokně Průzkumníka automaticky, vyberte tlačítko Aktualizovat průzkumníka v hlavičce MSLEARN-SECURE-ASPNET-CORE-IDENTITY v podokně Průzkumníka .
Oblasti představují způsob, jak webovou aplikaci ASP.NET Core rozdělit do menších funkčních skupin.
Scaffolder také provedl následující zvýrazněné změny souboru Program.cs, přeformátované pro čitelnost:
using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using RazorPagesPizza.Areas.Identity.Data; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("RazorPagesPizzaAuthConnection"); builder.Services.AddDbContext<RazorPagesPizzaAuth>(options => options.UseSqlServer(connectionString)); builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<RazorPagesPizzaAuth>(); // Add services to the container. builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
V předchozím kódu:
- Připojovací
RazorPagesPizzaAuthConnection
řetězec se načte z souboru appsettings.json. - Třída kontextu databáze EF Core s názvem
RazorPagesPizzaAuth
je nakonfigurovaná s připojovacím řetězcem. - Zaregistrují se služby Identity včetně výchozího uživatelského rozhraní, zprostředkovatelů tokenů a ověřování na základě souborů cookie.
.AddDefaultIdentity<IdentityUser>
říká službám identity, aby používaly výchozí uživatelský model.- Výraz
options => options.SignIn.RequireConfirmedAccount = true
lambda určuje, že uživatelé musí potvrdit své e-mailové účty. .AddEntityFrameworkStores<RazorPagesPizzaAuth>()
Určuje, že identita používá pro svou databázi výchozí úložiště Entity Framework Core. Použije seRazorPagesPizzaAuth
DbContext
třída .
app.UseAuthentication();
umožňuje možnosti ověřování. Konkrétně tak, že do kanálu pro zpracování požadavků HTTP aplikace přidá instanci ověřovacího middlewaru ASP.NET Core.
- Generátor identifikovaný jako
Konfigurace připojení k databázi
Oddíl ConnectionStrings
v appsettings.json souboru by měl vypadat nějak takto:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Tento připojovací řetězec ve výchozím nastavení odkazuje na instanci SQL Server Express LocalDB. Pokud používáte .devcontainer, musíte připojovací řetězec změnit následujícím způsobem. Uložte provedené změny.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True"
}
Tím se aktualizuje připojovací řetězec pro připojení k instanci SQL Server uvnitř kontejneru.
Aktualizace databáze
Teď, když jste ověřili připojovací řetězec, můžete vygenerovat a spustit migraci a sestavit databázi.
Spuštěním následujícího příkazu sestavte aplikaci:
dotnet build
Sestavení proběhne úspěšně bez jakýchkoli upozornění. Pokud se sestavení nezdaří, zkontrolujte výstupní informace o odstraňování potíží.
Nainstalujte migrační nástroj Entity Framework Core:
dotnet tool install dotnet-ef --version 6.0.3 --global
Nástroj pro migraci je nástroj .NET, který:
- Vygeneruje kód s názvem migrace, který vytvoří a aktualizuje databázi, která podporuje model entity Identity.
- Provede migrace do existující databáze.
- Je vyvolána prostřednictvím v
dotnet ef
tomto modulu.
Vytvořte a spusťte migraci EF Core pro aktualizaci databáze:
dotnet ef migrations add CreateIdentitySchema dotnet ef database update
Při migraci EF Core
CreateIdentitySchema
se pomocí změnového skriptu DDL (Data Definition Language) vytvořily tabulky podporující architekturu Identity. Například následující výstup znázorňujeCREATE TABLE
příkaz vygenerovaný migrací:info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (98ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE TABLE [AspNetUsers] ( [Id] nvarchar(450) NOT NULL, [UserName] nvarchar(256) NULL, [NormalizedUserName] nvarchar(256) NULL, [Email] nvarchar(256) NULL, [NormalizedEmail] nvarchar(256) NULL, [EmailConfirmed] bit NOT NULL, [PasswordHash] nvarchar(max) NULL, [SecurityStamp] nvarchar(max) NULL, [ConcurrencyStamp] nvarchar(max) NULL, [PhoneNumber] nvarchar(max) NULL, [PhoneNumberConfirmed] bit NOT NULL, [TwoFactorEnabled] bit NOT NULL, [LockoutEnd] datetimeoffset NULL, [LockoutEnabled] bit NOT NULL, [AccessFailedCount] int NOT NULL, CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id]) );
Tip
Zobrazil příkaz
ef
chybu týkající se nepodporované databáze LocalDb? Ujistěte se, že jste nastavili připojovací řetězec, jak je popsáno v části Konfigurace připojení k databázi.Rozšíření SQL Server bylo v případě potřeby přidáno do editoru Visual Studio Code, když jste přijali doporučená rozšíření. Stisknutím klávesy Ctrl+Alt+D přepnete do podokna SQL Server.
Rozbalte uzly pod existujícím připojením k databázi. Rozbalte uzel Databáze , RazorPagesPizza a nakonec uzel Tabulky . Poznamenejte si seznam tabulek. Tím se potvrdí, že migrace proběhla úspěšně.
Poznámka
Předchozí obrázek ukazuje příklad použití SQL Server Express LocalDB. Při použití .devcontainer má připojení název mssql-container.
Přidání odkazů pro přihlášení a registraci
Přejděte zpět do podokna Průzkumník . V souboru Pages/Shared/_Layout.cshtml nahraďte komentář @* Add the _LoginPartial partial view *@
následujícím kódem.
<partial name="_LoginPartial" />
Předchozí kód vykreslí v záhlaví každé stránky částečné zobrazení _LoginPartial
, které používá výchozí rozložení. _LoginPartial
bylo přidáno vygenerovaným kódem Identity. Toto částečné zobrazení nabízí uživateli odkazy pro přihlášení a registraci, pokud není přihlášený.
Otestování funkcí identity
To je vše potřebné k přidání výchozí implementace identity. Je čas to otestovat!
Ujistěte se, že jste uložili všechny změny.
V podokně terminálu sestavte projekt a spusťte aplikaci:
dotnet run
Přejděte do aplikace v prohlížeči jako předtím.
V záhlaví aplikace vyberte odkaz Zaregistrovat . Vyplněním formuláře vytvořte nový účet.
Zobrazí se stránka Potvrzení registrace . Vzhledem k tomu, že aplikace ještě není nakonfigurovaná tak, aby odesílala potvrzovací e-maily, najdete na této stránce potvrzovací odkaz.
Vyberte potvrzovací odkaz. Zobrazí se potvrzovací zpráva.
V záhlaví aplikace vyberte odkaz Přihlásit se a přihlaste se.
Po úspěšném přihlášení:
- Jste přesměrováni na domovskou stránku.
- V záhlaví aplikace se zobrazí hello [e-mailová adresa] a odkaz pro odhlášení .
- Je vytvořený soubor cookie s názvem .AspNetCore.Identity.Application. Identity zachovává relace uživatelů pomocí ověřování na základě souborů cookie.
V záhlaví aplikace vyberte odkaz Pro odhlášení .
Po úspěšném odhlášení se soubor cookie .AspNetCore.Identity.Application odstraní a ukončí tak relaci uživatele.
Aplikaci zastavíte stisknutím Klávesy Ctrl+C v podokně terminálu.
Souhrn
V této lekci jste přidali výchozí implementaci identity do existující webové aplikace. V další lekci se dozvíte o rozšíření a přizpůsobení identity.