Ćwiczenie — konfigurowanie obsługi mechanizmu Identity
Mechanizm Identity działa od razu bez żadnych dostosowań. W tej lekcji tożsamość jest dodawana do istniejącego projektu platformy Razor Pages ASP.NET Core.
Uzyskiwanie i otwieranie projektu startowego
Uwaga
Jeśli chcesz użyć elementu .devcontainer w usłudze GitHub Codespaces, przejdź do obszaru Codespaces dla repozytorium MicrosoftDocs/mslearn-secure-aspnet-core-identity . Utwórz nową przestrzeń kodu przy użyciu main
gałęzi , a następnie przejdź do kroku 3.
W oknie terminalu uruchom następujące polecenie, aby uzyskać projekt startowy:
git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
Przejdź do katalogu kodu źródłowego i uruchom Visual Studio Code:
cd mslearn-secure-aspnet-core-identity code .
Visual Studio Code zostanie otwarta. Zaakceptuj wszelkie monity o zainstalowanie zalecanych rozszerzeń lub wybierz pozycję Otwórz ponownie w kontenerze , jeśli chcesz użyć elementu .devcontainer.
Porada
Jeśli pominiesz monit o ponowne otwarcie w kontenerze, naciśnij klawisze Ctrl+Shift+P , aby otworzyć paletę poleceń, a następnie wyszukaj i wybierz pozycję Dev Containers: Otwórz ponownie w kontenerze.
Po załadowaniu projektu (lokalnie lub w kontenerze) naciśnij klawisze Ctrl+Shift+` , aby otworzyć nowe okienko terminalu.
W nowym okienku terminalu ustaw lokalizację na katalog RazorPagesPizza :
cd RazorPagesPizza
W okienku Eksplorator rozwiń katalog RazorPagesPizza , aby wyświetlić kod. RazorPagesPizza to katalog projektu. Podczas kontynuowania przyjmij, że wszystkie ścieżki omówione w tym module są powiązane z tą lokalizacją.
Eksplorowanie aplikacji
Uruchommy aplikację, aby szybko wprowadzić.
W okienku terminalu skompiluj projekt i uruchom aplikację:
dotnet run
Zanotuj adres URL wyświetlany w danych wyjściowych terminalu. Na przykład
https://localhost:7192
.Otwórz aplikację w przeglądarce, wybierając adres URL zapomocą klawiszaCtrl+.
Ważne
Jeśli używasz kontenera .devcontainer na platformie Docker, certyfikat SSL z wewnątrz kontenera nie będzie zaufany przez przeglądarkę. Aby wyświetlić aplikację internetową, należy wykonać jedną z następujących czynności:
- Zignoruj błąd certyfikatu. W przypadku korzystania z przeglądarki Microsoft Edge wybierz pozycję Zaawansowane i przejdź do hosta lokalnego (niezalecane). Szczegóły różnią się w zależności od przeglądarki.
- Zapisz certyfikat i dodaj go do zaufanych urzędów certyfikacji.
- Zaimportuj istniejący certyfikat dewelopera wewnątrz kontenera. Aby uzyskać więcej informacji, zobacz wygenerowane komentarze w pliku ./devcontainer/devcontainter.json.
Jeśli zdecydujesz się zaimportować istniejący certyfikat deweloperski wewnątrz kontenera, ścieżka kontenera /root/.aspnet/ zostanie uwidoczniona jako .devcontainer/persisted-data/.aspnet poza kontenerem. Jest to dla Twojej wygody.
Jeśli używasz elementu .devcontainer w usłudze GitHub Codespaces, nie jest wymagana żadna akcja. Usługa Codespaces automatycznie obsługuje połączenie SSL serwera proxy.
Zapoznaj się z aplikacją internetową w przeglądarce. Za pomocą linków w nagłówku:
- Przejdź do listy pizzy
- Przechodzenie z powrotem do strony głównej
Zauważ, że nie jest wymagane do uwierzytelnienia.
Naciśnij klawisze Ctrl+C w okienku terminalu, aby zatrzymać aplikację.
Dodawanie tożsamości ASP.NET Core do projektu
Domyślną implementację tożsamości można dodać za pomocą dotnet
narzędzi wiersza polecenia.
Zainstaluj generator szkieletów kodu platformy ASP.NET Core:
dotnet tool install dotnet-aspnet-codegenerator --version 6.0.2 --global
Szkielet jest narzędziem platformy .NET Core, które:
- Służy do dodawania domyślnych składników tożsamości do projektu.
- Umożliwia dostosowywanie składników interfejsu użytkownika tożsamości w następnej lekcji.
- Jest wywoływany za pomocą polecenia
dotnet aspnet-codegenerator
w tym module.
Dodaj następujące pakiety NuGet do projektu:
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
Te pakiety instalują szablony generowania kodu i zależności, które są używane przez generator szkieletów.
Porada
Aby wyświetlić dostępne generatory:
- W powłoce poleceń uruchom polecenie
dotnet aspnet-codegenerator -h
. - W programie Visual Studio kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz pozycję Dodaj>Nowy element szkieletowy.
- W powłoce poleceń uruchom polecenie
Użyj generatora szkieletów, aby dodać do projektu domyślne składniki mechanizmu Identity. W terminalu uruchom następujące polecenie:
dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth
W powyższym poleceniu:
- Generator zidentyfikowany jako
identity
jest używany do dodawania struktury Identity do projektu. - Opcja
--useDefaultUI
wskazuje, że jest używana biblioteka klas Razor (RCL) zawierająca domyślne elementy interfejsu użytkownika. Bootstrap służy do określania stylu składników. - Opcja
--dbContext
określa nazwę klasy kontekstu bazy danych EF Core do wygenerowania.
Następująca Areas struktura katalogów jest wyświetlana w katalogu RazorPagesPizza :
- Areas
- Identity (jest wyświetlany w tym samym wierszu co obszary)
- Data
- RazorPagesPizzaAuth.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity (jest wyświetlany w tym samym wierszu co obszary)
Porada
Areas Jeśli katalog nie zostanie automatycznie wyświetlony w okienku Eksplorator, wybierz przycisk Odśwież Eksplorator w nagłówku MSLEARN-SECURE-ASPNET-CORE-IDENTITY w okienku Eksplorator.
Obszary umożliwiają dzielenie aplikacji internetowej ASP.NET Core na mniejsze grupy funkcjonalne.
Ruszter dokonał również następujących wyróżnionych zmian w pliku Program.cs, sformatowanych w celu zapewnienia czytelności:
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();
Powyższy kod ma następujące działanie:
- Parametry
RazorPagesPizzaAuthConnection
połączenia są odczytywane z pliku appsettings.json. - Klasa kontekstu bazy danych EF Core o nazwie
RazorPagesPizzaAuth
jest skonfigurowana przy użyciu parametrów połączenia. - Usługi mechanizmu Identity są rejestrowane, w tym domyślny interfejs użytkownika, dostawcy tokenów i uwierzytelnianie oparte na plikach cookie.
.AddDefaultIdentity<IdentityUser>
polecenie usług identity do korzystania z domyślnego modelu użytkownika.- Wyrażenie
options => options.SignIn.RequireConfirmedAccount = true
lambda określa, że użytkownicy muszą potwierdzić swoje konta e-mail. .AddEntityFrameworkStores<RazorPagesPizzaAuth>()
Określa, że tożsamość używa domyślnego magazynu Entity Framework Core dla swojej bazy danych. UżywanaRazorPagesPizzaAuth
DbContext
jest klasa .
app.UseAuthentication();
umożliwia uwierzytelnianie. Dokładniej mówiąc, wystąpienie oprogramowania pośredniczącego uwierzytelniania ASP.NET Core zostało dodane do potoku obsługi żądań HTTP aplikacji.
- Generator zidentyfikowany jako
Konfigurowanie połączenia z bazą danych
Sekcja ConnectionStrings
w pliku appsettings.json powinna wyglądać podobnie do następującego kodu JSON:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Te parametry połączenia domyślnie wskazuje wystąpienie SQL Server Express LocalDB. Jeśli używasz elementu .devcontainer, musisz zmienić parametry połączenia w następujący sposób! Zapisz zmiany.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True"
}
Spowoduje to zaktualizowanie parametrów połączenia w celu nawiązania połączenia z wystąpieniem SQL Server wewnątrz kontenera.
Aktualizowanie bazy danych
Po zweryfikowaniu parametrów połączenia możesz wygenerować i uruchomić migrację w celu skompilowania bazy danych.
Uruchom następujące polecenie, aby skompilować aplikację:
dotnet build
Kompilacja zakończy się pomyślnie bez ostrzeżeń. Jeśli kompilacja zakończy się niepowodzeniem, sprawdź dane wyjściowe, aby uzyskać informacje dotyczące rozwiązywania problemów.
Zainstaluj narzędzie do migracji platformy Entity Framework Core:
dotnet tool install dotnet-ef --version 6.0.3 --global
Narzędzie do migracji to narzędzie platformy .NET, które:
- Generuje kod nazywany migracją w celu utworzenia i zaktualizowania bazy danych obsługującej model jednostki Identity.
- Wykonuje migracje do istniejącej bazy danych.
- Jest wywoływany za pomocą polecenia
dotnet ef
w tym module.
Utwórz i uruchom migrację EF Core, aby zaktualizować bazę danych:
dotnet ef migrations add CreateIdentitySchema dotnet ef database update
Migracja
CreateIdentitySchema
platformy EF Core zastosowała skrypt zmiany języka definicji danych (DDL), aby utworzyć tabele obsługujące mechanizm Identity. Na przykład następujące dane wyjściowe przedstawiają instrukcjęCREATE TABLE
wygenerowaną przez migrację: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]) );
Porada
ef
Czy polecenie zgłosiło błąd dotyczący nieobsługiwanej bazy danych LocalDb? Upewnij się, że ustawiono parametry połączenia zgodnie z opisem w sekcji "Konfigurowanie połączenia z bazą danych".Rozszerzenie SQL Server zostało dodane do Visual Studio Code w razie potrzeby po zaakceptowaniu zalecanych rozszerzeń. Naciśnij klawisze Ctrl+Alt+D, aby przełączyć się do okienka SQL Server.
Rozwiń węzły w ramach istniejącego połączenia z bazą danych. Rozwiń węzeł Bazy danych , węzeł RazorPagesPizza , a na koniec węzeł Tabele . Zanotuj listę tabel. Potwierdza to, że migracja zakończyła się pomyślnie.
Uwaga
Na powyższym obrazie przedstawiono przykład użycia SQL Server Express LocalDB. W przypadku korzystania z pliku devcontainer połączenie nosi nazwę mssql-container.
Dodawanie linków logowania i rejestracji
Wróć do okienka Eksplorator . W pliku Pages/Shared/_Layout.cshtml zastąp komentarz @* Add the _LoginPartial partial view *@
następującym kodem.
<partial name="_LoginPartial" />
Poprzedzający znacznik renderuje widok częściowy _LoginPartial
w nagłówku dowolnej strony, która używa układu domyślnego. Element _LoginPartial
został dodany przez szkielet mechanizmu Identity. Ten widok częściowy wyświetla użytkownikowi linki Log in (Zaloguj) i Register (Zarejestruj), jeśli użytkownik nie jest zalogowany.
Testowanie funkcjonalności tożsamości
To wszystko, co jest wymagane do dodania domyślnej implementacji tożsamości. Nadszedł czas, aby go przetestować!
Upewnij się, że wszystkie zmiany zostały zapisane.
W okienku terminalu skompiluj projekt i uruchom aplikację:
dotnet run
Przejdź do aplikacji w przeglądarce tak jak poprzednio.
Wybierz link Zarejestruj w nagłówku aplikacji. Wypełnij formularz, aby utworzyć nowe konto.
Zostanie wyświetlona strona Potwierdzenia rejestracji . Ponieważ aplikacja nie została jeszcze skonfigurowana do wysyłania wiadomości e-mail z potwierdzeniem, link potwierdzenia jest udostępniany na tej stronie.
Wybierz link potwierdzenia. Zostanie wyświetlony komunikat z potwierdzeniem.
Wybierz link Zaloguj się w nagłówku aplikacji i zaloguj się.
Po pomyślnym zalogowaniu:
- Nastąpi przekierowanie do strony głównej.
- Nagłówek aplikacji wyświetla ciąg Hello [adres e-mail]! i link wylogowywanie .
- Tworzony jest plik cookie o nazwie .AspNetCore.Identity.Application. Mechanizm Identity zachowuje sesje użytkownika z uwierzytelnianiem na podstawie plików cookie.
Wybierz link Wylogowywanie w nagłówku aplikacji.
Po pomyślnym wylogowaniu plik cookie .AspNetCore.Identity.Application zostanie usunięty, aby zakończyć sesję użytkownika.
Naciśnij klawisze Ctrl+C w okienku terminalu, aby zatrzymać aplikację.
Podsumowanie
W tej lekcji dodano domyślną implementację tożsamości do istniejącej aplikacji internetowej. W następnej lekcji dowiesz się więcej na temat rozszerzania i dostosowywania tożsamości.