Övning – Konfigurera stöd för Identity

Slutförd

Identity fungerar vid leverans, utan att det krävs någon anpassning. I den här lektionen läggs identiteten till i ett befintligt ASP.NET Core Razor Pages-projekt.

Öppna startprojektet

Om du vill använda det rekommenderade GitHub Codespace går du till dina Codespaces för lagringsplatsen MicrosoftDocs/mslearn-secure-aspnet-core-identity . Skapa ett nytt Codespace med hjälp av grenen main och gå sedan vidare till Utforska appen.

Följ dessa steg om du vill använda en lokal Dev Container:

  1. Öppna kommandopaletten genom att trycka på F1 i ett Visual Studio Code-fönster. Sök efter och välj Dev-Containers: Clone Repository in Container Volume....

  2. Ange följande lagringsplats-URL: https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity. Välj grenen main . Visual Studio Code skapar Dev-containern. Acceptera alla uppmaningar om att installera rekommenderade tillägg.

  3. Gå vidare till Utforska appen.

Följ dessa steg om du vill använda en lokal utvecklingsmiljö:

  1. I ett terminalfönster kör du följande kommando för att hämta startprojektet:

    git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
    
  2. Växla till källkodskatalogen och starta Visual Studio Code:

    cd mslearn-secure-aspnet-core-identity
    code .
    

    Visual Studio Code öppnas. Acceptera alla uppmaningar om att installera rekommenderade tillägg, men välj INTE Öppna igen i containern om du uppmanas att göra det. Fortsätt med nästa steg.

Utforska appen

  1. När projektet har lästs in trycker du på Ctrl+Skift+` för att öppna ett nytt terminalfönster.

  2. I det nya terminalfönstret anger du platsen till katalogen RazorPagesPizza :

    cd RazorPagesPizza
    
  3. I explorer-fönstret expanderar du katalogen RazorPagesPizza för att visa koden. RazorPagesPizza är projektkatalogen. När du fortsätter förutsätter du att alla sökvägar som beskrivs i den här modulen är relativa till den här platsen.

    Vi kör appen för att få en snabb introduktion.

  4. I terminalfönstret skapar du projektet och kör appen:

    dotnet run
    
  5. Observera url:en som visas i terminalutdata. Exempel: https://localhost:7192

  6. Öppna appen i webbläsaren genom att välja URL:en med Ctrl-klicka+.

    Viktigt!

    Om du använder Dev Container i lokal Docker kommer SSL-certifikatet inifrån containern inte att vara betrott av webbläsaren. Om du vill visa webbappen måste du göra något av följande:

    • Ignorera certifikatfelet. Om du använder Microsoft Edge väljer du Avancerat och Fortsätt till localhost (rekommenderas inte). Informationen varierar beroende på webbläsare.
    • Spara certifikatet och lägg till det i dina betrodda certifikatutfärdare.
    • Importera ett befintligt utvecklingscertifikat i containern. Mer information finns i de genererade kommentarerna i ./devcontainer/devcontainter.json.
  7. Utforska webbappen i webbläsaren. Använda länkarna i rubriken:

    1. Gå till pizzalista
    2. Gå tillbaka hem

    Observera att du inte behöver autentisera.

  8. Om du vill stoppa appen trycker du på Ctrl+C i terminalfönstret.

Lägga till ASP.NET Core Identity i projektet

Standardimplementeringen av identitet kan läggas till med dotnet kommandoradsverktyg.

  1. Installera ASP.NET Core-kodautogeneratorn:

    dotnet tool install dotnet-aspnet-codegenerator --version 8.0.* --global
    

    Scaffolder är ett .NET-verktyg som:

    • Används för att lägga till standardidentitetskomponenterna i projektet.
    • Aktiverar anpassning av Identity UI-komponenter i nästa enhet.
    • Anropas via dotnet aspnet-codegenerator i den här modulen.
  2. Lägg till följande NuGet-paket i projektet:

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

    Paketet installerar kodgenereringmallar och beroenden som används av autogeneratorn.

    Dricks

    Så här visar du tillgängliga generatorer:

    • Kör dotnet aspnet-codegenerator -h i kommandogränssnittet.
    • I Visual Studio högerklickar du på projektet i Solution Explorer och väljer Add>New Scaffolded Item (Lägg till > Nytt autogenererat objekt).
  3. Använd autogeneratorn för att lägga till Identity-standardkomponenter i projektet. Kör följande kommando i terminalen:

    dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth --userClass RazorPagesPizzaUser
    

    I kommandot ovan:

    • Generatorn som identifieras som identity används för att lägga till identitetsramverket i projektet.
    • Alternativet --useDefaultUI anger att ett Razor-klassbibliotek (RCL) som innehåller standardelementen för användargränssnittet används. Bootstrap används för att formatera komponenterna.
    • Alternativet --dbContext anger namnet på en EF Core-databaskontextklass som ska genereras.
    • Alternativet --userClass anger namnet på den användarklass som ska genereras. Standardanvändarklassen är IdentityUser, men eftersom användarklassen utökas i en senare enhet anges en anpassad användarklass med namnet RazorPagesPizzaUser . Klassen RazorPagesPizzaUser härleds från IdentityUser.

    Följande Areas katalogstruktur visas i katalogen RazorPagesPizza :

    • Areas
      • Identity (visas på samma rad som Områden)
        • Data
          • RazorPagesPizzaAuth.cs
          • RazorPagesPizzaUser.cs
        • Pages
          • _ValidationScriptsPartial.cshtml
          • _ViewStart.cshtml

    Dricks

    Areas Om katalogen inte visas automatiskt i explorer-fönstret väljer du knappen Uppdatera utforskaren i rubriken MSLEARN-SECURE-ASPNET-CORE-IDENTITY i utforskarfönstret.

    Områden utgör ett sätt att partitionera en ASP.NET Core-webbapp i mindre funktionsgrupper.

    Byggnadsställningen gjorde också följande markerade ändringar i Program.cs, omformaterade för läsbarhet:

    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();
    

    I koden ovan:

    • Anslutningssträng RazorPagesPizzaAuthConnection läse från appsettings.json.
    • EF Core-databaskontextklassen med namnet RazorPagesPizzaAuth, konfigureras med anslutningssträng.
    • Identity-tjänsterna registreras, inklusive standardanvändargränssnittet, tokenprovider och cookiebaserad autentisering.
      • .AddDefaultIdentity<RazorPagesPizzaUser> instruerar identitetstjänsterna att använda den anpassade RazorPagesPizzaUser användarmodellen.
      • Lambda-uttrycket options => options.SignIn.RequireConfirmedAccount = true anger att användarna måste bekräfta sina e-postkonton.
      • .AddEntityFrameworkStores<RazorPagesPizzaAuth>() anger att Identity använder standardarkivet Entity Framework Core för sin databas. Klassen RazorPagesPizzaAuthDbContext används.

Konfigurera databasanslutningen

Avsnittet ConnectionStrings i appsettings.json bör se ut ungefär som följande JSON:

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

Den här anslutningssträng pekar på en instans av SQL Server Express LocalDB som standard. Om du utvecklar lokalt gör du ingenting. Det här är rätt anslutningssträng.

I Codespaces eller Dev Containers är anslutningssträng felaktig. Om du använder Codespace eller Dev Container måste du ändra anslutningssträng på följande sätt! Spara ändringarna.

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

Detta uppdaterar anslutningssträng för att ansluta till instansen av SQL Server i containern.

Uppdatera databasen

Nu när du har verifierat anslutningssträng kan du generera och köra en migrering för att skapa databasen.

  1. Skapa appen genom att köra följande kommando:

    dotnet build
    

    Den bör skapas utan varningar. Om den inte skapas kontrollerar du felsökningsinformationen i utdata.

  2. Installera verktyget för Entity Framework Core-migrering:

    dotnet tool install dotnet-ef --version 8.0.* --global
    

    Migreringsverktyget är ett .NET-verktyg som:

    • Genererar kod som kallas migrering för att skapa och uppdatera databasen som stöder identitetsentitetsmodellen.
    • Kör migreringar mot en befintlig databas.
    • Anropas via dotnet ef i den här modulen.
  3. Om du vill uppdatera databasen skapar och kör du en EF Core-migrering:

    dotnet ef migrations add CreateIdentitySchema
    dotnet ef database update
    

    CreateIdentitySchema EF Core-migreringen tillämpade en ett DDL-ändringsskript (Data Definition Language) för att skapa tabellerna som stöder Identity. Följande utdata visar till exempel en CREATE TABLE instruktion som genereras av migreringen:

    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])
          );
    

    Dricks

    ef Utlöste kommandot ett fel om att LocalDb inte stöds? Kontrollera att du har angett din anslutningssträng enligt beskrivningen i avsnittet "Konfigurera databasanslutningen"!

  4. SQL Server-tillägget lades till i Visual Studio Code om det behövs när du accepterade de rekommenderade tilläggen. Tryck på Ctrl++ för att växla till FÖNSTRET SQL Server.

  5. Expandera noderna under den befintliga databasanslutningen. Expandera noden Databaser, noden RazorPagesPizza och slutligen noden Tabeller. Anteckna listan över tabeller. Detta bekräftar att migreringen lyckades.

    RazorPagesPizza-databasen med de nyligen skapade tabellerna.

    Kommentar

    Föregående bild visar ett exempel med SQL Server Express LocalDB. När du använder .devcontainer heter anslutningen mssql-container.

Gå tillbaka till explorer-fönstret. Ersätt kommentaren Pages/Shared/_Layout.cshtml med nedanstående i @* Add the _LoginPartial partial view *@.

<partial name="_LoginPartial" />

Föregående markering återger den partiella vyn _LoginPartial i sidhuvudet på valfri sida som använder standardlayouten. Identity-ställningen har lagts till _LoginPartial. Den här partiella vyn presenterar användaren med länkarna Log in (Logga in) och Register (Registrera) om användaren inte är inloggad.

Testa identitetsfunktionen

Det är allt som krävs för att lägga till standardimplementeringen av identiteten. Det är dags att testa det!

  1. Se till att du sparar alla dina ändringar.

  2. I terminalfönstret skapar du projektet och kör appen:

    dotnet run
    
  3. Gå till appen i webbläsaren som tidigare.

  4. Välj länken Registrera i appens huvud. Fyll i formuläret för att skapa ett nytt konto.

    Sidan Registrera bekräftelse visas. Eftersom appen inte har konfigurerats för att skicka e-postbekräftelse finns bekräftelselänken på den här sidan.

  5. Välj bekräftelselänken. Ett bekräftelsemeddelande visas.

  6. Välj länken Inloggning i appens huvud och logga in.

    Efter en lyckad inloggning:

    • Du omdirigeras till startsidan.
    • Appens huvud visar Hello [e-postadress]! och en utloggningslänk .
    • En cookie med namnet .AspNetCore.Identity.Application skapas. Identity bevarar användarsessioner med cookiebaserad autentisering.
  7. Välj länken Logga ut i appens huvud.

    Efter utförd utloggning tas cookien .AspNetCore.Identity.Application bort för att avsluta användarsessionen.

  8. Om du vill stoppa appen trycker du på Ctrl+C i terminalfönstret.

Sammanfattning

I den här lektionen har du lagt till standardimplementeringen för identitet i en befintlig webbapp. I nästa lektion får du lära dig mer om att utöka och anpassa identiteten.