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 alma ve açma
Not
GitHub Codespaces'te .devcontainer kullanmak istiyorsanız MicrosoftDocs/mslearn-secure-aspnet-core-identity deposu için kod alanlarınıza gidin. dalını main
kullanarak yeni bir kod alanı oluşturun ve 3. adıma geçin.
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 istemleri kabul edin veya .devcontainer kullanmak istiyorsanız Kapsayıcıda Yeniden Aç'ı seçin.
İpucu
Kapsayıcıda yeniden açma istemini kaçırırsanız, komut paletini açmak için Ctrl+Shift+P tuşlarına basın ve ardından Geliştirici Kapsayıcıları: Kapsayıcıda Yeniden Aç'ı arayın ve seçin.
Proje yüklendikten sonra (yerel olarak veya kapsayıcıda), 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.
Uygulamayı keşfetme
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
Docker'da .devcontainer 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 dosyasında oluşturulan açıklamalar.
Kapsayıcının içinde mevcut bir geliştirme sertifikasını içeri aktarmayı seçerseniz, /root/.aspnet/ kapsayıcı yolu kapsayıcının dışında .devcontainer/persisted-data/.aspnet olarak gösterilir. Bu sizin için uygun.
GitHub Codespaces'te .devcontainer kullanıyorsanız hiçbir işlem yapmanız gerekmez. Codespaces ara sunucu SSL bağlantısını otomatik olarak işler.
Tarayıcıda web uygulamasını keşfedin. Üst bilgideki bağlantıları kullanma:
- Pizza Listesi'ne gidin
- Giriş sayfasına geri dön
Kimlik doğrulaması yapmanıza gerek olmadığını unutmayın.
Uygulamayı durdurmak için terminal bölmesinde Ctrl+C tuşuna basın.
Projeye ASP.NET Core 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 6.0.2 --global
İskele, şu işlemleri gerçekleştiren bir .NET Core 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 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
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
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 kullanıcı arabirimi öğelerini içeren bir Razor sınıf kitaplığının (RCL) kullanıldığını gösterir. Bootstrap bileşenleri stil için kullanılır. --dbContext
seçeneği, oluşturulacak EF Core veritabanı bağlam sınıfının adını belirtir.
RazorPagesPizza dizininde aşağıdaki Areas dizin yapısı görünür:
- Areas
- Identity ( Alanlar ile aynı satırda görüntülenir)
- Data
- RazorPagesPizzaAuth.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity ( Alanlar ile aynı satırda görüntülenir)
İpucu
Areas Dizin Gezgin bölmesinde otomatik olarak görünmüyorsa, Gezgin bölmesinde MSLEARN-SECURE-ASPNET-CORE-IDENTITY üst bilgisinde Gezgini Yenile düğmesini seçin.
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 dosyasında okunabilirlik için yeniden biçimlendirilmiş aşağıdaki vurgulanmış değişiklikleri de yaptı:
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();
Yukarıdaki kodda:
RazorPagesPizzaAuthConnection
Bağlantı dizesi appsettings.json dosyasından okunur.- adlı
RazorPagesPizzaAuth
EF Core veritabanı bağlam sınıfı bağlantı dizesiyle 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ı söyler.- 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.
app.UseAuthentication();
kimlik doğrulama özelliklerini etkinleştirir. Daha ayrıntılı olarak, uygulamanın HTTP isteklerini işleyen işlem hattına ASP.NET Core kimlik doğrulaması ara yazılımının bir örneği eklenir.
- olarak
Veritabanı bağlantısını yapılandırma
içindeki ConnectionStrings
appsettings.json bölümü aşağıdaki JSON'a benzer görünmelidir:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Bu bağlantı dizesi varsayılan olarak SQL Server Express LocalDB örneğini gösterir. .devcontainer kullanıyorsanız bağlantı dizesini aşağıdaki gibi değiştirmeniz gerekir! Yaptığınız değişiklikleri kaydedin.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True"
}
Bu, bağlantı dizesini kapsayıcı içindeki SQL Server örneğine bağlanacak şekilde güncelleştirir.
Veritabanını güncelleştirme
Bağlantı dizesini doğruladığınıza göre, veritabanını oluşturmak için bir geçiş oluşturup ç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 çıkışı inceleyin.
Entity Framework Core geçiş aracını yükleme:
dotnet tool install dotnet-ef --version 6.0.3 --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 bir 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 çıkışta geçiş tarafından oluşturulan birCREATE TABLE
deyim gösterilmektedir: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ı dizenizi ayarladığınızdan emin olun!önerilen uzantıları kabul ettiğinizde SQL Server uzantısı Visual Studio Code eklendi. 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. _LoginPartial
, Identity iskelesi tarafından eklendi. 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 etme
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 bilgisinde 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 henüz 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çma sonrasında:
- Giriş sayfasına yönlendirilirsiniz.
- Uygulamanın üst bilgisinde Merhaba [e-posta adresi]! ve Bir Oturumu Kapat 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 Kimlik'i genişletme ve özelleştirme hakkında bilgi edineceksiniz.