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.

Otevření počátečního projektu

Pokud chcete použít doporučený kód GitHubu, přejděte do služby Codespaces pro úložiště MicrosoftDocs/mslearn-secure-aspnet-core-identity. Vytvořte nový Codespace pomocí main větve a pak přeskočte na Prozkoumání aplikace.

Pokud chcete použít místní vývojový kontejner, postupujte takto:

  1. V okně editoru Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Vyhledejte a vyberte Dev-Containers: Clone Repository in Container Volume....

  2. Zadejte následující adresu URL úložiště: https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity. main Vyberte větev. Visual Studio Code vytvoří vývojový kontejner. Přijměte všechny výzvy k instalaci doporučených rozšíření.

  3. Přejděte k prozkoumání aplikace.

Pokud chcete použít místní vývojové prostředí, postupujte takto:

  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í, ale po zobrazení výzvy nevybírejte znovu otevřít v kontejneru . Pokračujte dalšími kroky.

Prozkoumat aplikaci

  1. Po načtení projektu stisknutím kombinace kláves Ctrl+Shift+` otevřete nové podokno terminálu.

  2. V novém podokně terminálu nastavte umístění do adresáře RazorPagesPizza :

    cd RazorPagesPizza
    
  3. V podokně Průzkumník rozbalte adresář RazorPagesPizza a zobrazte kód. RazorPagesPizza je adresář projektu. Jak budete pokračovat, předpokládejme, že všechny cesty popisované v tomto modulu jsou relativní k tomuto umístění.

    Pojďme aplikaci spustit, abychom získali rychlý úvod.

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

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

  6. Otevřete aplikaci v prohlížeči tak, že vyberete adresu URL a stisknete klávesu Ctrl+.

    Důležité

    Pokud používáte dev container v místním Dockeru, nebude váš prohlížeč důvěryhodný certifikát SSL z kontejneru. Pokud chcete webovou aplikaci zobrazit, musíte udělat jednu z těchto věcí:

    • Ignorujte chybu certifikátu. Pokud používáte Microsoft Edge, vyberte Advanced and Continue to 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.
    • Naimportujte existující vývojový certifikát uvnitř kontejneru. Další informace najdete vygenerovaných komentářů v souboru ./devcontainer/devcontainter.json.
  7. Prozkoumejte webovou aplikaci v prohlížeči. Použití odkazů v záhlaví:

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

    Všimněte si, že k ověření není potřeba.

  8. Pokud chcete aplikaci zastavit, stiskněte v podokně terminálu ctrl +C.

Přidání ASP.NET základní 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 8.0.* --global
    

    Scaffolder je nástroj .NET, který:

    • Slouží k přidání výchozích komponent identity do projektu.
    • Umožňuje přizpůsobení součástí uživatelského rozhraní identity v další lekci.
    • Vyvolá se prostřednictvím dotnet aspnet-codegenerator tohoto modulu.
  2. Přidejte do projektu následující balíčky NuGet:

    dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 8.0.*
    dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 8.0.*
    dotnet add package Microsoft.AspNetCore.Identity.UI --version 8.0.*
    dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0.*
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 8.0.*
    dotnet add package Microsoft.EntityFrameworkCore.Tools --version 8.0.*
    

    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 --userClass RazorPagesPizzaUser
    

    V předcházejícím příkazu:

    • Generátor identifikovaný jako identity se používá k přidání architektury Identity do projektu.
    • Tato --useDefaultUI možnost označuje, že se používá knihovna tříd Razor (RCL) obsahující výchozí prvky uživatelského rozhraní. Metoda Bootstrap se používá ke stylu komponent.
    • Tato --dbContext možnost určuje název třídy kontextu databáze EF Core, která se má vygenerovat.
    • Možnost --userClass určuje název třídy uživatele, která se má vygenerovat. Výchozí třída uživatele je IdentityUser, ale vzhledem k tomu, že je třída uživatele rozšířena v pozdější lekci, je zadána vlastní třída uživatele s názvem RazorPagesPizzaUser . Třída RazorPagesPizzaUser je odvozena z IdentityUser.

    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
          • RazorPagesPizzaUser.cs
        • Pages
          • _ValidationScriptsPartial.cshtml
          • _ViewStart.cshtml

    Tip

    Pokud se Areas adresář v podokně Průzkumníka nezobrazuje automaticky, vyberte tlačítko Aktualizovat průzkumníka v záhlaví MSLEARN-SECURE-ASPNET-CORE-IDENTITY v podokně Průzkumník .

    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 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") 
        ?? throw new InvalidOperationException("Connection string 'RazorPagesPizzaAuthConnection' not found.");
    
    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.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    

    V předchozím kódu:

    • Připojovací řetězec RazorPagesPizzaAuthConnection se čte z appsettings.json.
    • Třída kontextu databáze EF Core s názvem RazorPagesPizzaAuth, je nakonfigurována s připojovací řetězec.
    • 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> informuje služby identit, 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á výchozí úložiště Entity Framework Core pro svou databázi. Používá se RazorPagesPizzaAuth DbContext třída.

Konfigurace připojení k databázi

Část ConnectionStrings by appsettings.json měla vypadat podobně jako v následujícím formátu JSON:

"ConnectionStrings": {
    "RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Tato připojovací řetězec ve výchozím nastavení odkazuje na instanci SQL Server Express LocalDB. Pokud vyvíjíte místně, nic nedělejte. Toto je správná připojovací řetězec.

Ve službě Codespaces nebo Dev Containers je připojovací řetězec nesprávná. Pokud používáte Codespace nebo Dev Container, musíte změnit připojovací řetězec následujícím způsobem. Nezapomeňte změny uložit.

"ConnectionStrings": {
    "RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True;Encrypt=False"
}

Tím se aktualizuje připojovací řetězec pro připojení k instanci SQL Serveru v kontejneru.

Aktualizace databáze

Teď, když jste ověřili připojovací řetězec, můžete vygenerovat a spustit migraci pro sestavení databáze.

  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 8.0.* --global
    

    Nástroj pro migraci je nástroj .NET, který:

    • Vygeneruje kód označovaný jako migrace pro vytvoření a aktualizaci databáze, která podporuje model entity Identity.
    • Provede migrace proti existující databázi.
    • Vyvolá se prostřednictvím dotnet ef tohoto modulu.
  3. Pokud chcete databázi aktualizovat, vytvořte a spusťte migraci EF Core:

    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 příkaz vygenerovaný CREATE TABLE 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é místní databáze? 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 Serveru 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áves Ctrl+Alt+D přepněte do podokna SQL Serveru.

  5. Rozbalte uzly pod existujícím připojením k databázi. Rozbalte uzel Databáze, uzel 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 se připojení jmenuje 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í. Bylo přidáno _LoginPartialgenerování uživatelského rozhraní 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. Nezapomeňte uložit všechny provedené 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 stejně 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 není nakonfigurovaná tak, aby odesílala potvrzovací e-maily, je na této stránce uvedený potvrzovací odkaz.

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

  6. V záhlaví aplikace vyberte přihlašovací odkaz a přihlaste se.

    Po úspěšném přihlášení:

    • Budete 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. Pokud chcete aplikaci zastavit, stiskněte v podokně terminálu ctrl +C.

Shrnutí

V této lekci jste do existující webové aplikace přidali výchozí implementaci identity. V další lekci se dozvíte o rozšíření a přizpůsobení identity.