Cvičení – konfigurace podpory architektury Identity

Dokončeno

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.

  1. 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
    
  2. 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.

  3. Po načtení projektu (místně nebo v kontejneru) otevřete stisknutím klávesy Ctrl+Shift+` nové podokno terminálu.

  4. V novém podokně terminálu nastavte umístění na adresář RazorPagesPizza :

    cd RazorPagesPizza
    
  5. 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.

  1. V podokně terminálu sestavte projekt a spusťte aplikaci:

    dotnet run
    
  2. Poznamenejte si adresu URL zobrazenou ve výstupu terminálu. Například, https://localhost:7192.

  3. 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.

  4. Prozkoumejte webovou aplikaci v prohlížeči. Použití odkazů v záhlaví:

    1. Přejít na seznam pizzy
    2. Přejít zpět na domovskou stránku

    Všimněte si, že se nemusíte ověřovat.

  5. 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.

  1. 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.
  2. 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.
  3. 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

    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 RazorPagesPizzaAuthje 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 se RazorPagesPizzaAuthDbContext 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.

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.

  1. 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íží.

  2. 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.
  3. 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ňuje CREATE 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.

  4. 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.

  5. 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ě.

    Databáze RazorPagesPizza s nově vytvořenými tabulkami.

    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ř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!

  1. Ujistěte se, že jste uložili všechny změny.

  2. V podokně terminálu sestavte projekt a spusťte aplikaci:

    dotnet run
    
  3. Přejděte do aplikace v prohlížeči jako předtím.

  4. 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.

  5. Vyberte potvrzovací odkaz. Zobrazí se potvrzovací zpráva.

  6. 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.
  7. 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.

  8. 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.