Alıştırma - Identity desteğini yapılandırma
Identity, özelleştirme olmadan kullanıma hazır olarak sunulur. Bu ünitede, Identity mevcut bir ASP.NET Core Razor Pages projesine eklenir.
Başlangıç projesini açma
Önerilen GitHub Codespace'ı kullanmak için MicrosoftDocs/mslearn-secure-aspnet-core-identity deposu için Codespaces bölümüne gidin. Dalını main
kullanarak yeni bir Codespace oluşturun ve uygulamayı keşfedin bölümüne atlayın.
Yerel geliştirme kapsayıcısını kullanmak için şu adımları izleyin:
Visual Studio Code penceresinde F1 tuşuna basarak komut paletini açın. Dev-Containers: Clone Repository in Container Volume.... için arama yapın ve seçin.
Aşağıdaki depo URL'sini girin:
https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
. Dalımain
seçin. Visual Studio Code, Geliştirme Kapsayıcısını oluşturur. Önerilen uzantıları yüklemek için tüm istemleri kabul edin.Uygulamayı keşfetme'ye atlayın.
Yerel geliştirme ortamını kullanmak için şu adımları izleyin:
Başlangıç projesini almak için terminal penceresinde aşağıdaki komutu çalıştırın:
git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
Kaynak kod dizinine geçin ve Visual Studio Code'ı başlatın:
cd mslearn-secure-aspnet-core-identity code .
Visual Studio Code açılır. Önerilen uzantıları yüklemek için tüm istemleri kabul edin, ancak istenirse Kapsayıcıda Yeniden Aç'ı SEÇMEYİnİZ. Sonraki adımlarla devam edin.
Uygulamayı keşfedin
Proje yüklendikten sonra yeni bir terminal bölmesi açmak için Ctrl+Shift tuşuna`+ basın.
Yeni terminal bölmesinde konumunuzu RazorPagesPizza dizinine ayarlayın:
cd RazorPagesPizza
Gezgin bölmesinde RazorPagesPizza dizinini genişleterek kodu görüntüleyin. RazorPagesPizza proje dizinidir. Devam ederken, bu modülde açıklanan tüm yolların bu konuma göre olduğunu varsayalım.
Hızlı bir giriş yapmak için uygulamayı çalıştıralım.
Terminal bölmesinde projeyi derleyin ve uygulamayı çalıştırın:
dotnet run
Terminal çıkışında görüntülenen URL'yi not edin. Örneğin,
https://localhost:7192
.Ctrl+tıklamasıyla URL'yi seçerek uygulamayı tarayıcınızda açın.
Önemli
Geliştirme Kapsayıcısını yerel Docker'da kullanıyorsanız, kapsayıcının içinden gelen SSL sertifikasına tarayıcınız tarafından güvenilmez. Web uygulamasını görüntülemek için aşağıdakilerden birini yapmanız gerekir:
- Sertifika hatasını yoksayın. Microsoft Edge kullanıyorsanız Gelişmiş'i ve LocalHost'a devam et 'i seçin (önerilmez). Ayrıntılar tarayıcıya göre değişir.
- Sertifikayı kaydedin ve güvenilen sertifika yetkililerinize ekleyin.
- Kapsayıcının içinde var olan bir geliştirme sertifikasını içeri aktarın. Daha fazla bilgi için bkz. ./devcontainer/devcontainter.json içinde oluşturulan açıklamalar.
Tarayıcıda web uygulamasını keşfedin. Üst bilgideki bağlantıları kullanarak:
- Pizza Listesi'ne gidin
- Giriş sayfasına geri dön
Kimlik doğrulaması yapmanız gerekmeyenlere dikkat edin.
Uygulamayı durdurmak için terminal bölmesinde Ctrl+C tuşuna basın.
Projeye ASP.NET Çekirdek Kimliği ekleme
Varsayılan Kimlik uygulaması komut satırı araçlarıyla dotnet
eklenebilir.
ASP.NET Core kod iskelesini yükleyin:
dotnet tool install dotnet-aspnet-codegenerator --version 8.0.* --global
yapı iskelesi, aşağıdakilere sahip bir .NET aracıdır:
- Projeye varsayılan Kimlik bileşenlerini eklemek için kullanılır.
- Bir sonraki ünitede Kimlik Kullanıcı Arabirimi bileşenlerinin özelleştirilmesini sağlar.
- Bu modülde aracılığıyla
dotnet aspnet-codegenerator
çağrılır.
Aşağıdaki NuGet paketlerini projeye ekleyin:
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.*
Bu paketler, iskele tarafından kullanılan kod oluşturma şablonlarını ve bağımlılıkları yükler.
İpucu
Kullanılabilir oluşturucuları görüntülemek için:
- Komut kabuğunda
dotnet aspnet-codegenerator -h
komutunu çalıştırın. - Visual Studio’da, Çözüm Gezgini’nde projeye sağ tıklayıp Ekle>Yeni İskele Öğesi seçeneğini belirleyin.
- Komut kabuğunda
Varsayılan Identity bileşenlerini projeye eklemek için iskeleyi kullanın. Terminalde aşağıdaki komutu çalıştırın:
dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth --userClass RazorPagesPizzaUser
Yukarıdaki komutta:
- olarak
identity
tanımlanan oluşturucu, Identity çerçevesini projeye eklemek için kullanılır. - seçeneği,
--useDefaultUI
varsayılan ui öğelerini içeren bir Razor sınıf kitaplığının (RCL) kullanıldığını gösterir. Bootstrap, bileşenlere stil eklemek için kullanılır. --dbContext
seçeneği, oluşturulacak EF Core veritabanı bağlam sınıfının adını belirtir.--userClass
seçeneği, oluşturulacak kullanıcı sınıfının adını belirtir. Varsayılan kullanıcı sınıfı olurIdentityUser
, ancak kullanıcı sınıfı daha sonraki bir ünitede genişletildiğinden adlıRazorPagesPizzaUser
özel bir kullanıcı sınıfı belirtilir.RazorPagesPizzaUser
sınıfı öğesindenIdentityUser
türetilir.
RazorPagesPizza dizininde aşağıdaki Areas dizin yapısı görüntülenir:
- Areas
- Identity (ile aynı satırda görüntülenirAlanlar)
- Data
- RazorPagesPizzaAuth.cs
- RazorPagesPizzaUser.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity (ile aynı satırda görüntülenirAlanlar)
İpucu
Dizin Gezgin bölmesinde otomatik olarak görünmüyorsa, Gezgin bölmesindeki MSLEARN-SECURE-ASPNET-CORE-IDENTITY üst bilgisindeki Gezgini Yenile düğmesini seçin.Areas
Alanlar, bir ASP.NET Core web uygulamasını daha küçük işlevsel gruplar halinde bölümlemeye yönelik bir yol sunar.
yapı iskelesi, Program.cs için aşağıdaki vurgulanmış değişiklikleri de yaptı ve okunabilirlik için yeniden biçimlendirildi:
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();
Önceki kodda:
RazorPagesPizzaAuthConnection
bağlantı dizesi appsettings.json okunur.- adlı
RazorPagesPizzaAuth
EF Core veritabanı bağlam sınıfı, bağlantı dizesi ile yapılandırılır. - Varsayılan kullanıcı arabirimi, belirteç sağlayıcıları ve tanımlama bilgisi tabanlı kimlik doğrulamasını da içeren Identity hizmetleri kaydedilir.
.AddDefaultIdentity<IdentityUser>
Kimlik hizmetlerine varsayılan kullanıcı modelini kullanmasını bildirir.- Lambda ifadesi
options => options.SignIn.RequireConfirmedAccount = true
, kullanıcıların e-posta hesaplarını onaylaması gerektiğini belirtir. .AddEntityFrameworkStores<RazorPagesPizzaAuth>()
Identity'in veritabanı için varsayılan Entity Framework Core deposunu kullandığını belirtir.RazorPagesPizzaAuth
DbContext
sınıfı kullanılır.
- olarak
Veritabanı bağlantısını yapılandırma
ConnectionStrings
içindeki appsettings.json bölümü aşağıdaki JSON'a benzer olmalıdır:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Bu bağlantı dizesi varsayılan olarak bir SQL Server Express LocalDB örneğini gösterir. Yerel olarak geliştiriyorsanız hiçbir şey yapma. Bu doğru bağlantı dizesi.
Codespaces veya Geliştirme Kapsayıcılarında bağlantı dizesi yanlıştır. Codespace veya Geliştirme Kapsayıcısı kullanıyorsanız, bağlantı dizesi aşağıdaki gibi değiştirmeniz gerekir! Değişikliklerinizi kaydettiğinizden emin olun.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True;Encrypt=False"
}
Bu, kapsayıcı içindeki SQL Server örneğine bağlanmak için bağlantı dizesi güncelleştirir.
Veritabanını güncelleştirme
artık bağlantı dizesi doğruladığınıza göre, veritabanını oluşturmak için bir geçiş oluşturabilir ve çalıştırabilirsiniz.
Uygulamayı derlemek için aşağıdaki komutu çalıştırın:
dotnet build
Derleme hiç uyarı alınmadan başarılı olur. Derleme başarısız olursa, sorun giderme bilgileri için çıktıyı inceleyin.
Entity Framework Core geçiş aracını yükleme:
dotnet tool install dotnet-ef --version 8.0.* --global
Geçiş aracı, aşağıdakileri sağlayan bir .NET aracıdır:
- Kimlik varlık modelini destekleyen veritabanını oluşturmak ve güncelleştirmek için geçiş olarak adlandırılan kod oluşturur.
- Var olan bir veritabanına geçişleri yürütür.
- Bu modülde aracılığıyla
dotnet ef
çağrılır.
Veritabanını güncelleştirmek için EF Core geçişi oluşturun ve çalıştırın:
dotnet ef migrations add CreateIdentitySchema dotnet ef database update
CreateIdentitySchema
EF Core geçişi, Identity’yi destekleyen tabloları oluşturmak için bir Veri Tanımlama Dili (DDL) değişiklik betiği uyguladı. Örneğin, aşağıdaki çıktıda geçiş tarafından oluşturulan birCREATE TABLE
deyim gösterilir: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]) );
İpucu
Komut, LocalDb'nin
ef
desteklenmemesiyle ilgili bir hata mı verdi? "Veritabanı bağlantısını yapılandırma" bölümünde açıklandığı gibi bağlantı dizesi ayarladığınızdan emin olun!Sql Server uzantısı, önerilen uzantıları kabul ettiğinizde gerekirse Visual Studio Code'a eklenmiştir. SQL Server bölmesine geçmek için Ctrl+Alt+D tuşlarına basın.
Mevcut veritabanı bağlantısının altındaki düğümleri genişletin. Veritabanları düğümünü, RazorPagesPizza düğümünü ve son olarak Tablolar düğümünü genişletin. Tablo listesini not edin. Bu, geçişin başarılı olduğunu onaylar.
Not
Yukarıdaki görüntüde SQL Server Express LocalDB kullanan bir örnek gösterilmektedir. .devcontainer kullanılırken, bağlantı mssql-container olarak adlandırılır.
Oturum açma ve kayıt bağlantılarını ekleme
Gezgin bölmesine geri dönün. Pages/Shared/_Layout.cshtml dosyasında, @* Add the _LoginPartial partial view *@
açıklamasını aşağıdakiyle değiştirin.
<partial name="_LoginPartial" />
Yukarıdaki işaretleme, varsayılan düzeni kullanan herhangi bir sayfanın üst bilgisinde yer alan _LoginPartial
kısmi görünümünü işler. Kimlik iskelesi eklendi _LoginPartial
. Kullanıcı oturum açmadıysa, bu kısmi görünüm Oturum açın ve Kaydolun bağlantılarını kullanıcıya gösterir.
Kimlik işlevselliğini test edin
Varsayılan Kimlik uygulamasını eklemek için gereken her şey bu kadardır. Test etme zamanı!
Tüm değişikliklerinizi kaydettiğinizden emin olun.
Terminal bölmesinde projeyi derleyin ve uygulamayı çalıştırın:
dotnet run
Daha önce olduğu gibi tarayıcınızda uygulamaya gidin.
Uygulamanın üst bilgisindeki Kaydet bağlantısını seçin. Yeni bir hesap oluşturmak için formu doldurun.
Kayıt onay sayfası görüntülenir. Uygulama onay e-postaları gönderecek şekilde yapılandırılmadığından, onay bağlantısı bu sayfada sağlanır.
Onay bağlantısını seçin. Bir onay iletisi görüntülenir.
Uygulamanın üst bilgisindeki Oturum aç bağlantısını seçin ve oturum açın.
Başarılı bir oturum açmadan sonra:
- Giriş sayfasına yönlendirilirsiniz.
- Uygulamanın üst bilgisinde Merhaba [e-posta adresi]! ve bir Oturumu Kapatma bağlantısı görüntülenir.
- .AspNetCore.Identity.Application adlı bir tanımlama bilgisi oluşturulur. Identity, kullanıcı oturumlarını tanımlama bilgisi tabanlı kimlik doğrulaması ile korur.
Uygulamanın üst bilgisinde Oturumu Kapat bağlantısını seçin.
Oturum başarıyla kapatıldıktan sonra, kullanıcı oturumunu sonlandırmak için .AspNetCore.Identity.Application tanımlama bilgisi silinir.
Uygulamayı durdurmak için terminal bölmesinde Ctrl+C tuşuna basın.
Özet
Bu ünitede, mevcut bir web uygulamasına varsayılan Kimlik uygulamasını eklediniz. Bir sonraki ünitede Kimliği genişletme ve özelleştirme hakkında bilgi edineceksiniz.