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 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:

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

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

  3. Uygulamayı keşfetme'ye atlayın.

Yerel geliştirme ortamını kullanmak için şu adımları izleyin:

  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 tüm istemleri kabul edin, ancak istenirse Kapsayıcıda Yeniden Aç'ı SEÇMEYİnİZ. Sonraki adımlarla devam edin.

Uygulamayı keşfedin

  1. Proje yüklendikten sonra yeni bir terminal bölmesi açmak için Ctrl+Shift tuşuna`+ basın.

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

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

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

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

  6. 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.
  7. Tarayıcıda web uygulamasını keşfedin. Üst bilgideki bağlantıları kullanarak:

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

    Kimlik doğrulaması yapmanız gerekmeyenlere dikkat edin.

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

  1. 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.
  2. 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.
  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 --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ı olur IdentityUser, 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ı öğesinden IdentityUsertü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

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

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.

  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 çıktıyı inceleyin.

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

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

  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 tabloları içeren 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. 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ı!

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

  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ç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.
  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 Kimliği genişletme ve özelleştirme hakkında bilgi edineceksiniz.