Alıştırma - Identity desteğini yapılandırma

Tamamlandı

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.

  1. 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
    
  2. 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.

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

  4. Yeni terminal bölmesinde konumunuzu RazorPagesPizza dizinine ayarlayın:

    cd RazorPagesPizza
    
  5. 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.

  1. Terminal bölmesinde projeyi derleyin ve uygulamayı çalıştırın:

    dotnet run
    
  2. Terminal çıkışında görüntülenen URL'yi not edin. Örneğin, https://localhost:7192.

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

  4. Tarayıcıda web uygulamasını keşfedin. Üst bilgideki bağlantıları kullanma:

    1. Pizza Listesi'ne gidin
    2. Giriş sayfasına geri dön

    Kimlik doğrulaması yapmanıza gerek olmadığını unutmayın.

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

  1. 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.
  2. 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.
  3. 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

    İ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ı RazorPagesPizzaAuthEF 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. RazorPagesPizzaAuthDbContext 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.

Veritabanı bağlantısını yapılandırma

içindeki ConnectionStringsappsettings.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.

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

  2. 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.
  3. 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 bir CREATE 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!

  4. ö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.

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

    Yeni oluşturulan tablolarla RazorPagesPizza veritabanı.

    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.

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ı!

  1. Tüm değişikliklerinizi kaydettiğinizden emin olun.

  2. Terminal bölmesinde projeyi derleyin ve uygulamayı çalıştırın:

    dotnet run
    
  3. Daha önce olduğu gibi tarayıcınızda uygulamaya gidin.

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

  5. Onay bağlantısını seçin. Bir onay iletisi görüntülenir.

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

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