Oefening: identiteitsondersteuning configureren
Identiteit werkt standaard zonder dat er aanpassingen nodig zijn. In deze les wordt identiteit toegevoegd aan een bestaand ASP.NET Core Razor Pages-project.
Het startersproject openen
Als u de aanbevolen GitHub Codespace wilt gebruiken, gaat u naar uw Codespaces voor de opslagplaats MicrosoftDocs/mslearn-secure-aspnet-core-identity . Maak een nieuwe Codespace met behulp van de main
vertakking en ga vervolgens verder met De app verkennen.
Voer de volgende stappen uit om een lokale Dev-container te gebruiken:
Druk in een Visual Studio Code-venster op F1 om het opdrachtenpalet te openen. Zoek en selecteer Dev-Containers: Opslagplaats klonen in containervolume....
Voer de volgende opslagplaats-URL in:
https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
. Selecteer demain
vertakking. Visual Studio Code maakt de Dev-container. Accepteer eventuele aanwijzingen om aanbevolen extensies te installeren.Ga verder met de app verkennen.
Voer de volgende stappen uit om een lokale ontwikkelomgeving te gebruiken:
Voer in een terminalvenster de volgende opdracht uit om het startersproject op te halen:
git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
Ga naar de broncodemap en start Visual Studio Code:
cd mslearn-secure-aspnet-core-identity code .
Visual Studio Code wordt geopend. Accepteer eventuele aanwijzingen om aanbevolen extensies te installeren, maar selecteer Opnieuw openen niet in container als hierom wordt gevraagd. Ga verder met de volgende stappen.
De app verkennen
Nadat het project is geladen, drukt u op Ctrl+Shift+` om een nieuw terminalvenster te openen.
Stel uw locatie in het nieuwe terminalvenster in op de map RazorPagesPizza :
cd RazorPagesPizza
Vouw in het deelvenster Explorer de map RazorPagesPizza uit om de code weer te geven. RazorPagesPizza is de projectmap. Als u doorgaat, wordt ervan uitgegaan dat alle paden die in deze module worden besproken, relatief zijn ten opzichte van deze locatie.
We gaan de app uitvoeren om een korte inleiding te krijgen.
Bouw het project in het terminalvenster en voer de app uit:
dotnet run
Noteer de URL die wordt weergegeven in de terminaluitvoer. Bijvoorbeeld:
https://localhost:7192
.Open de app in uw browser door met Ctrl op+de URL te klikken.
Belangrijk
Als u de Dev-container in lokale Docker gebruikt, wordt het SSL-certificaat vanuit de container niet vertrouwd door uw browser. Als u de web-app wilt weergeven, moet u een van de volgende handelingen uitvoeren:
- Negeer de certificaatfout. Als u Microsoft Edge gebruikt, selecteert u Geavanceerd en Doorgaan naar localhost (niet aanbevolen). Details variëren per browser.
- Sla het certificaat op en voeg het toe aan uw vertrouwde certificeringsinstanties.
- Importeer een bestaand ontwikkelingscertificaat in de container. Zie de gegenereerde opmerkingen in ./devcontainer/devcontainter.json voor meer informatie.
Verken de web-app in de browser. De koppelingen in de koptekst gebruiken:
- Ga naar Pizzalijst
- Ga terug naar de startpagina
U ziet dat u zich niet hoeft te verifiëren.
Als u de app wilt stoppen, drukt u op Ctrl+C in het terminalvenster.
ASP.NET Core Identity toevoegen aan het project
De standaard-identiteits-implementatie kan worden toegevoegd met dotnet
opdrachtregelprogramma's.
Installeer de ASP.NET Core-codegenerator:
dotnet tool install dotnet-aspnet-codegenerator --version 8.0.* --global
De scaffolder is een .NET-hulpprogramma dat:
- Wordt gebruikt om de standaardidentiteitsonderdelen aan het project toe te voegen.
- Hiermee kunt u de onderdelen van de gebruikersinterface van identiteit aanpassen in de volgende les.
- Wordt aangeroepen via
dotnet aspnet-codegenerator
deze module.
Voeg de volgende NuGet-pakketten toe aan het project:
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.*
Met deze pakketten worden door de generator te gebruiken sjablonen en afhankelijkheden voor het genereren van code geïnstalleerd.
Tip
De beschikbare generatoren weergeven:
- Voer in de opdrachtshell
dotnet aspnet-codegenerator -h
uit. - Klik in Visual Studio met de rechtermuisknop op het project in Solution Explorer en selecteer Toevoegen>Nieuw gegenereerd item.
- Voer in de opdrachtshell
Gebruik de generator om de standaardonderdelen van identiteit toe te voegen aan het project. Voer in de terminal de volgende opdracht uit:
dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth --userClass RazorPagesPizzaUser
In de voorgaande opdracht:
- De generator die wordt geïdentificeerd als
identity
wordt gebruikt om het Identiteitsframework toe te voegen aan het project. - De
--useDefaultUI
optie geeft aan dat een Razor-klassebibliotheek (RCL) met de standaard-UI-elementen wordt gebruikt. Bootstrap wordt gebruikt om de onderdelen een stijl te geven. - Met
--dbContext
de optie geeft u de naam op van een contextklasse voor de EF Core-database die moet worden gegenereerd. - Met
--userClass
de optie geeft u de naam op van de gebruikersklasse die moet worden gegenereerd. De standaardgebruikersklasse isIdentityUser
, maar omdat de gebruikersklasse in een latere eenheid wordt uitgebreid, wordt een aangepaste gebruikersklasse met de naamRazorPagesPizzaUser
opgegeven. DeRazorPagesPizzaUser
klasse is afgeleid vanIdentityUser
.
De volgende Areas mapstructuur wordt weergegeven in de map RazorPagesPizza :
- Areas
- Identity (wordt weergegeven op dezelfde regel als Gebieden)
- Data
- RazorPagesPizzaAuth.cs
- RazorPagesPizzaUser.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity (wordt weergegeven op dezelfde regel als Gebieden)
Tip
Als de Areas map niet automatisch wordt weergegeven in het deelvenster Explorer, selecteert u de knop Verkenner in de header MSLEARN-SECURE-ASPNET-CORE-IDENTITY in het deelvenster Explorer .
Gebieden bieden een manier om een ASP.NET Core-web-app te partitioneren in kleinere functionele groepen.
De scaffolder heeft ook de volgende gemarkeerde wijzigingen aangebracht in Program.cs, opnieuw opgemaakt voor leesbaarheid:
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();
In de voorgaande code:
- De
RazorPagesPizzaAuthConnection
verbindingsreeks wordt gelezen uit appsettings.json. - De contextklasse van de EF Core-database, genaamd
RazorPagesPizzaAuth
, is geconfigureerd met de verbindingsreeks. - De identiteitsservices zijn geregistreerd, met inbegrip van de standaardgebruikersinterface, tokenproviders en verificatie op basis van cookies.
.AddDefaultIdentity<RazorPagesPizzaUser>
geeft aan dat de Identiteitsservices het aangepasteRazorPagesPizzaUser
gebruikersmodel moeten gebruiken.- De lambda-expressie
options => options.SignIn.RequireConfirmedAccount = true
geeft aan dat gebruikers hun e-mailaccounts moeten bevestigen. .AddEntityFrameworkStores<RazorPagesPizzaAuth>()
geeft aan dat Identity gebruikmaakt van het standaard Entity Framework Core-archief voor de database. DeRazorPagesPizzaAuth
DbContext
klasse wordt gebruikt.
- De generator die wordt geïdentificeerd als
Verbinding met de database configureren
De ConnectionStrings
sectie in appsettings.json moet er ongeveer uitzien als de volgende JSON:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Deze verbindingsreeks verwijst standaard naar een exemplaar van SQL Server Express LocalDB. Als u lokaal ontwikkelt, doet u niets. Dit is de juiste verbindingsreeks.
In Codespaces of Dev Containers is de verbindingsreeks onjuist. Als u de Codespace of Dev Container gebruikt, moet u de verbindingsreeks als volgt wijzigen. Zorg ervoor dat u uw wijzigingen opslaat.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True;Encrypt=False"
}
Hiermee wordt de verbindingsreeks bijgewerkt om verbinding te maken met het exemplaar van SQL Server in de container.
De database bijwerken
Nu u de verbindingsreeks hebt gecontroleerd, kunt u een migratie genereren en uitvoeren om de database te bouwen.
Voer de volgende opdracht uit om de app te bouwen:
dotnet build
Het bouwen hoort zonder waarschuwingen te lukken. Als het bouwen mislukt, controleert u de uitvoer op probleemoplossingsinformatie.
Installeer het Entity Framework Core-hulpprogramma voor migratie:
dotnet tool install dotnet-ef --version 8.0.* --global
Het migratieprogramma is een .NET-hulpprogramma dat:
- Hiermee genereert u code die een migratie wordt genoemd om de database te maken en bij te werken die het identiteitsentiteitsmodel ondersteunt.
- Hiermee worden migraties uitgevoerd op basis van een bestaande database.
- Wordt aangeroepen via
dotnet ef
deze module.
Als u de database wilt bijwerken, maakt en voert u een EF Core-migratie uit:
dotnet ef migrations add CreateIdentitySchema dotnet ef database update
Via de
CreateIdentitySchema
-EF Core-migratie is een Data Definition Language-script (DDL) toegepast om de tabellen te maken die identiteit ondersteunen. In de volgende uitvoer ziet u bijvoorbeeld eenCREATE TABLE
instructie die is gegenereerd door de migratie: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
Heeft de
ef
opdracht een fout gegenereerd over LocalDb die niet wordt ondersteund? Zorg ervoor dat u uw verbindingsreeks hebt ingesteld, zoals beschreven in de sectie Databaseverbinding configureren.De SQL Server-extensie is indien nodig toegevoegd aan Visual Studio Code wanneer u de aanbevolen extensies hebt geaccepteerd. Druk op Ctrl Alt++D om over te schakelen naar het deelvenster SQL Server.
Vouw de knooppunten uit onder de bestaande databaseverbinding. Vouw het knooppunt Databases , het knooppunt RazorPagesPizza en ten slotte het knooppunt Tabellen uit. Noteer de lijst met tabellen. Hiermee wordt bevestigd dat de migratie is geslaagd.
Notitie
In de voorgaande afbeelding ziet u een voorbeeld met behulp van SQL Server Express LocalDB. Wanneer u de .devcontainer gebruikt, krijgt de verbinding de naam mssql-container.
De aanmeldings- en registratiekoppelingen toevoegen
Ga terug naar het deelvenster Explorer . Vervang in Pages/Shared/_Layout.cshtml de opmerking @* Add the _LoginPartial partial view *@
door het volgende.
<partial name="_LoginPartial" />
In de voorgaande opmaak wordt de gedeeltelijke _LoginPartial
-weergave weergegeven in de header van elke pagina met de standaardindeling. De id-scaffold toegevoegd _LoginPartial
. In deze gedeeltelijke weergave vindt de gebruiker koppelingen voor Aanmelden en Registreren als de gebruiker niet is aangemeld.
De identiteitsfunctionaliteit testen
Dat is alles wat nodig is om de standaard-identiteits-implementatie toe te voegen. Het is tijd om het te testen!
Zorg ervoor dat u al uw wijzigingen opslaat.
Bouw het project in het terminalvenster en voer de app uit:
dotnet run
Navigeer naar de app in uw browser zoals eerder.
Selecteer de koppeling Registreren in de koptekst van de app. Vul het formulier in om een nieuw account te maken.
De bevestigingspagina Registreren wordt weergegeven. Omdat de app niet is geconfigureerd voor het verzenden van bevestigingsmails, wordt de bevestigingskoppeling weergegeven op deze pagina.
Selecteer de bevestigingskoppeling. Er wordt een bevestigingsbericht weergegeven.
Selecteer de aanmeldingskoppeling in de koptekst van de app en meld u aan.
Na een geslaagde aanmelding:
- U wordt omgeleid naar de startpagina.
- In de koptekst van de app wordt Hallo [e-mailadres]! en een afmeldingskoppeling weergegeven.
- Er wordt een cookie gemaakt met de naam .AspNetCore.Identity.Application. Met identiteit blijven gebruikerssessies met verificatie op basis van cookies behouden.
Selecteer de afmeldingskoppeling in de koptekst van de app.
Nadat u zich hebt afgemeld, wordt de cookie .AspNetCore.Identity.Application verwijderd om de gebruikerssessie te beëindigen.
Als u de app wilt stoppen, drukt u op Ctrl+C in het terminalvenster.
Samenvatting
In deze les hebt u de standaardidentiteits-implementatie toegevoegd aan een bestaande web-app. In de volgende les leert u meer over het uitbreiden en aanpassen van identiteiten.