Aracılığıyla paylaş


ASP.NET Core projelerinde iskele Identity

Gönderen Rick Anderson

BlazorIdentity Iskele

ASP.NET Core Identity iskelesi, s ve Blazor Server uygulamalara ASP.NET Core Identity Blazor Web Appekler. yapı iskelesi bileşenleri uygulamaya ekledikten IdentityRazor sonra, bileşenleri uygulamanızın gereksinimlerine uyacak şekilde özelleştirebilirsiniz.

yapı iskelesi uygulamaya iskele oluşturmak için gerekli C# kodunu oluştursa da, işlemi tamamlamak için Identity projenin veritabanını bir Entity Framework (EF) Core veritabanı geçişi ile güncelleştirmeniz gerekir. Bu makalede, veritabanını geçirmek için gereken adımlar açıklanmaktadır.

yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin. GitHub veya değişiklikleri geri döndürme özelliğiyle dosya değişikliklerini gösteren başka bir kaynak denetim sistemi kullanmanızı öneririz.

ile iki öğeli kimlik doğrulaması (2FA), hesap onayı ve parola kurtarma ve diğer güvenlik özellikleri Identitykullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir.

Razor Sayfalar ve MVC Identity iskelesi

ASP.NET Core, sınıf kitaplığı (RCL) olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar RCL'de bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi Identity uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Özelleştirilmiş Identity kod, RCL tarafından Identity sağlanan varsayılan uygulamayı geçersiz kılar. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.

Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.

yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.

Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.

İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.

Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.

Projeye Blazor iskele Identity oluşturma

Bu bölüm s ve Blazor Server uygulamalar için Blazor Web Appgeçerlidir.

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Blazor Identity . Ekle düğmesini seçin.
  • Ekle BlazorIdentity iletişim kutusunda:
    • Veritabanı bağlam sınıfını (DbContext sınıfı) artı (+) düğmesiyle seçin veya ekleyin.
    • Varsayılan olarak SQL Server olan veritabanı sağlayıcısını (Veritabanı sağlayıcısı) seçin.
    • Kullanıcı sınıfını (Kullanıcı sınıfı) artı (+) düğmesiyle seçin veya ekleyin.
    • Ekle düğmesini seçin.

Oluşturulan Identity veritabanı kodu için Geçişler EF Coregerekir. Aşağıdaki adımlarda veritabanına geçişin nasıl oluşturulacağı ve uygulanacağı açıklanmaktadır.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

İstemci tarafı Blazor uygulamaları (Tek başına Blazor WebAssembly)

İstemci tarafı Blazor uygulamaları (Tek başına Blazor WebAssembly) kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Çekirdek Identity iskelesini kullanamaz.

Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity

Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Geçişler, UseAuthentication ve düzen

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Düzen değişiklikleri

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini düzen dosyasına ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Yetkilendirmeli bir Razor projeye iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini dosyaya Views/Shared/_Layout.cshtml ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Aşağıdaki vurgulanmış kodda gösterildiği gibi öğesini Program.cs ekleyinMapRazorPages:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Yetkilendirmeli bir MVC projesine iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Tam Identity kullanıcı arabirimi kaynağı oluşturma

Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.

Parola yapılandırması

içinde Startup.ConfigureServicesyapılandırıldıysaPasswordOptions,[StringLength] yapı iskelesi sayfalarındaki Identity özellik için Password öznitelik yapılandırması gerekebilir. InputModelPassword özellikleri aşağıdaki dosyalarda bulunur:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Sayfayı devre dışı bırakma

Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu yaklaşım kullanılabilir.

Kullanıcı kaydını devre dışı bırakmak için:

  • yapı iskelesi Identity. Account.Register, Account.Login ve Account.RegisterConfirmation bilgilerini ekleyin. Örneğin:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin Areas/Identity/Pages/Account/Register.cshtml.cs :

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin Areas/Identity/Pages/Account/Register.cshtml :

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Kayıt bağlantısını açıklama satırı veya kaldırma Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Sayfayı güncelleştirin Areas/Identity/Pages/Account/RegisterConfirmation .

    • Cshtml dosyasından kodu ve bağlantıları kaldırın.
    • onay kodunu içinden PageModelkaldırın:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Kullanıcı eklemek için başka bir uygulama kullanma

Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:

  • Ayrılmış bir yönetici web uygulaması.
  • Konsol uygulaması.

Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:

  • Kullanıcıların listesi belleğe okunur.
  • Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
  • Kullanıcı veritabanına eklenir Identity .
  • Kullanıcıya bildirim gönderilir ve parolayı değiştirmesi bildirilir.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Aşağıdaki kod, kullanıcı eklemeyi özetler:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Üretim senaryoları için de benzer bir yaklaşım izlenebilir.

Statik Identity varlıkların yayımlanmasını engelleme

Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.

ASP.NET Core, sınıf kitaplığı (RCL) olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar RCL'de bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi Identity uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Oluşturulan kod, RCL'deki aynı koddan Identity önceliklidir. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.

Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.

yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.

Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.

İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.

Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.

Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Geçişler, UseAuthentication ve düzen

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Düzen değişiklikleri

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini düzen dosyasına ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Yetkilendirmeli bir Razor projeye iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini dosyaya Views/Shared/_Layout.cshtml ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Aşağıdaki vurgulanmış kodda gösterildiği gibi öğesini Program.cs ekleyinMapRazorPages:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Yetkilendirmeli bir MVC projesine iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Yetkilendirme ile sunucu tarafı Blazor bir uygulamaya iskele Identity oluşturma

Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.

Not

.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.


İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Geçişler

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Stil kimlik doğrulama uç noktaları

Sunucu tarafı Blazor uygulamalar Sayfalar Identity sayfalarını kullandığındanRazor, bir ziyaretçi sayfalar ve bileşenler arasında Identity gezindiğinde kullanıcı arabiriminin stili değişir. Uyumsuz stilleri ele almak için iki seçeneğiniz vardır:

Özel Identity bileşenler

ASP.NET Core Identity , uygulamalarda birincil istemci-sunucu iletişim modeli Blazor olmayan HTTP isteği ve yanıt iletişimi bağlamında çalışacak şekilde tasarlanmıştır. Kullanıcı yönetimi için ASP.NET Core Identity kullanan ASP.NET Core uygulamaları, kullanıcı kaydı, oturum açma, oturumu kapatma ve diğer kullanıcı yönetimi görevleri gibi Identity ile ilgili kullanıcı arabirimi Razor bileşenleri yerine Razor Pages kullanmalıdır.

SignInManager<TUser> Bileşenlerde Razor desteklenmediğinden ve UserManager<TUser> desteklenmediğinden, sunucu tarafı Identityetkinleştirilmiş bir ASP.NET Core uygulaması aracılığıyla bileşenlerden Razor eylemleri yönetmek Identity için web API'sini kullanmanızı öneririz. Uygulamalar için web API'leri oluşturma yönergeleri için Blazor bkz . ASP.NET Core Blazor uygulamasından web API'sini çağırma.

Sayfalar yerine Razor bileşenleri Identity kullanma Razor yaklaşımı kendi özelRazor Identitybileşenlerinizi oluşturmaktır, ancak Microsoft bu yaklaşımı önermez veya desteklemez. Ek bağlam için aşağıdaki tartışmaları inceleyin. Aşağıdaki tartışmalarda, Microsoft dışı GitHub depolarında sorun açıklamalarındaki kod örnekleri ve çapraz bağlantılı kod örnekleri Microsoft tarafından desteklenmez, ancak bazı geliştiriciler için yararlı olabilir:

Özel IdentityRazor bileşenler oluşturmaya çalışırken veya üçüncü taraf Razor bileşenleri ararken ek yardım için aşağıdaki kaynakları öneririz:

Uygulama stilleriyle Blazor özel düzen kullanma

Sayfa Identity düzeni ve stilleri, varsayılan Blazor temaya benzer stiller kullanan sayfalar üretmek için değiştirilebilir. Bu yaklaşım belgelerde ele alınmıyor.

İstemci tarafı Blazor uygulamaları

İstemci tarafı Blazor uygulamaları kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity iskelesini kullanamaz. Sunucu tarafı ASP.NET Barındırılan Blazor çözümlerin Çekirdek uygulamaları bu makaledeki Razor Sayfalar/MVC yönergelerini izleyebilir ve destekleyen Identitydiğer ASP.NET Core uygulamaları gibi yapılandırılır.

Çerçeve, Blazor kullanıcı arabirimi sayfalarının Identity bileşen sürümlerini içermezRazor. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.

Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity

Tam Identity kullanıcı arabirimi kaynağı oluşturma

Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.

Parola yapılandırması

içinde Startup.ConfigureServicesyapılandırıldıysaPasswordOptions,[StringLength] yapı iskelesi sayfalarındaki Identity özellik için Password öznitelik yapılandırması gerekebilir. InputModelPassword özellikleri aşağıdaki dosyalarda bulunur:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Sayfayı devre dışı bırakma

Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu yaklaşım kullanılabilir.

Kullanıcı kaydını devre dışı bırakmak için:

  • yapı iskelesi Identity. Account.Register, Account.Login ve Account.RegisterConfirmation bilgilerini ekleyin. Örneğin:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin Areas/Identity/Pages/Account/Register.cshtml.cs :

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin Areas/Identity/Pages/Account/Register.cshtml :

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Kayıt bağlantısını açıklama satırı veya kaldırma Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Sayfayı güncelleştirin Areas/Identity/Pages/Account/RegisterConfirmation .

    • Cshtml dosyasından kodu ve bağlantıları kaldırın.
    • onay kodunu içinden PageModelkaldırın:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Kullanıcı eklemek için başka bir uygulama kullanma

Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:

  • Ayrılmış bir yönetici web uygulaması.
  • Konsol uygulaması.

Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:

  • Kullanıcıların listesi belleğe okunur.
  • Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
  • Kullanıcı veritabanına eklenir Identity .
  • Kullanıcıya bildirim gönderilir ve parolayı değiştirmesi bildirilir.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Aşağıdaki kod, kullanıcı eklemeyi özetler:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Üretim senaryoları için de benzer bir yaklaşım izlenebilir.

Statik Identity varlıkların yayımlanmasını engelleme

Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.

ASP.NET Core, sınıf kitaplığı (RCL) olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar RCL'de bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi Identity uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Oluşturulan kod, RCL'deki aynı koddan Identity önceliklidir. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.

Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.

yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.

Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.

İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.

Mevcut tek tek hesapları olan bir projeye yeni bir veri bağlamı ile iskele Identity oluştururken şu çağrıları açın Startup.ConfigureServices ve kaldırın:

  • AddDbContext
  • AddDefaultIdentity

Örneğin, AddDbContext ve AddDefaultIdentity aşağıdaki kodda açıklama satırı oluşturulur:

public void ConfigureServices(IServiceCollection services)
{
    //services.AddDbContext<ApplicationDbContext>(options =>
    //    options.UseSqlServer(
    //        Configuration.GetConnectionString("DefaultConnection")));
    //services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    //    .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();
}

Yukarıdaki kod, içinde yinelenen kodu açıklama olarak gösterir Areas/Identity/IdentityHostingStartup.cs

Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.

Boş bir projeye iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

sınıfını Startup aşağıdakine benzer bir kodla güncelleştirin:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

UseHsts önerilir ancak gerekli değildir. Daha fazla bilgi için bkz . HTTP Katı Aktarım Güvenliği Protokolü.

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Identity içinde Areas/Identity/IdentityHostingStartup.csyapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.

Geçişler, UseAuthentication ve düzen

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Kimlik doğrulamayı etkinleştir

sınıfını Startup aşağıdakine benzer bir kodla güncelleştirin:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

UseHsts önerilir ancak gerekli değildir. Daha fazla bilgi için bkz . HTTP Katı Aktarım Güvenliği Protokolü.

Düzen değişiklikleri

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini düzen dosyasına ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @RenderSection("Scripts", required: false)
</body>
</html>

Yetkilendirmeli bir Razor projeye iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Bazı Identity seçenekler içinde Areas/Identity/IdentityHostingStartup.csyapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.

Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

İsteğe bağlı: Oturum açma kısmi (_LoginPartial) öğesini dosyaya Views/Shared/_Layout.cshtml ekleyin:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @RenderSection("Scripts", required: false)
</body>
</html>

Dosyayı adresine Pages/Shared/_LoginPartial.cshtml Views/Shared/_LoginPartial.cshtmltaşıyın.

Identity içinde Areas/Identity/IdentityHostingStartup.csyapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

sınıfını Startup aşağıdakine benzer bir kodla güncelleştirin:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

UseHsts önerilir ancak gerekli değildir. Daha fazla bilgi için bkz . HTTP Katı Aktarım Güvenliği Protokolü.

Yetkilendirmeli bir MVC projesine iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Mevcut yetkilendirme olmadan bir sunucu tarafı Blazor uygulamasına iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Identity içinde Areas/Identity/IdentityHostingStartup.csyapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.

Geçişler

Oluşturulan Identity veritabanı kodu, Entity Framework (EF) Çekirdek Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, bir geçiş oluşturun ve veritabanını güncelleştirin.

Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Geçiş ekle'yi seçin.

Geçişe, geçişi açıklayan bir ad olan gibi CreateIdentitySchemabir Geçiş adı verin. Veritabanı bağlamın DbContext sınıf adları alanına yüklenmesini bekleyin; bu işlem birkaç saniye sürebilir. Geçişi oluşturmak için Son'u seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu yeniden seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Update database komutu, yapı iskelesi Up tarafından oluşturulan bir geçiş kodu dosyasına uygulanmamış yöntem geçişlerini yürütür. Bu durumda, komut dosyada Migrations/{TIME STAMP}_{MIGRATION NAME}.cs yöntemini yürütür Up ve bu yöntem tabloları, kısıtlamaları ve dizinleri oluştururIdentity. Yer {TIME STAMP} tutucu bir zaman damgası, {MIGRATION NAME} yer tutucu ise geçiş adıdır.

Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:

Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın. Hizmet Bağımlılıkları'nın SQL Server Express LocalDB alanında üç noktayı (...) ve ardından Veritabanını güncelleştir komutunu seçin.

Veritabanını en son geçişle güncelleştir iletişim kutusu açılır. DbContext sınıf adları alanının güncelleştirilmesini ve birkaç saniye sürebilecek önceki geçişlerin yüklenmesini bekleyin. Son düğmesini seçin.

İşlem tamamlandıktan sonra Kapat düğmesini seçin.

Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied" sütunu içerir.

Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration

Get-Migration

Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.

Stil kimlik doğrulama uç noktaları

Sunucu tarafı Blazor uygulamalar Sayfalar Identity sayfalarını kullandığındanRazor, bir ziyaretçi sayfalar ve bileşenler arasında Identity gezindiğinde kullanıcı arabiriminin stili değişir. Uyumsuz stilleri ele almak için iki seçeneğiniz vardır:

Özel Identity bileşenler

Sayfalar yerine bileşenlerini Identity kullanma yaklaşımı, bileşenler oluşturmaktır Identity . Bileşenlerde desteklenmediğinden SignInManager ve UserManager desteklenmediğinden, kullanıcı hesabı eylemlerini işlemek için uygulamadaki Blazor web API Razor uç noktalarını kullanın.

Uygulama stilleriyle Blazor özel düzen kullanma

Sayfa Identity düzeni ve stilleri, varsayılan Blazor temaya benzer stiller kullanan sayfalar üretmek için değiştirilebilir. Bu yaklaşım belgelerde ele alınmıyor.

Yetkilendirme ile sunucu tarafı Blazor bir uygulamaya iskele Identity oluşturma

İskeleyi Identity çalıştırın:

  • Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
  • Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
  • Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
    • için_Layout.cshtml mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:
      • Pages/Shared/_Layout.cshtmlSayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.
      • Views/Shared/_Layout.cshtml MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
    • Veri bağlamı için (DbContext sınıfı):
      • Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
      • Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin, Contoso.Data.ApplicationDbContext "Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin, ContosoUser "Contoso" adlı bir şirket için).
    • yapı iskelesini çalıştırmak için Ekle düğmesini seçin.

Bazı Identity seçenekler içinde Areas/Identity/IdentityHostingStartup.csyapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.

İstemci tarafı Blazor uygulamaları

İstemci tarafı Blazor uygulamaları kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity iskelesini kullanamaz. Sunucu tarafı ASP.NET Barındırılan Blazor çözümlerin Çekirdek uygulamaları bu makaledeki Razor Sayfalar/MVC yönergelerini izleyebilir ve destekleyen Identitydiğer ASP.NET Core uygulamaları gibi yapılandırılır.

Çerçeve, Blazor kullanıcı arabirimi sayfalarının Identity bileşen sürümlerini içermezRazor. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.

Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity

Tam Identity kullanıcı arabirimi kaynağı oluşturma

Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.

Aşağıdaki vurgulanmış kod, ASP.NET Core 2.1 web uygulamasında varsayılan Identity kullanıcı arabirimini ile Identity değiştirme değişikliklerini gösterir. Kullanıcı arabiriminin Identity tam denetimine sahip olmak için bunu yapmak isteyebilirsiniz.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>()
        // services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = $"/Identity/Account/Login";
        options.LogoutPath = $"/Identity/Account/Logout";
        options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
    });

    // using Microsoft.AspNetCore.Identity.UI.Services;
    services.AddSingleton<IEmailSender, EmailSender>();
}

Varsayılan Identity değer aşağıdaki kodda değiştirilir:

services.AddIdentity<IdentityUser, IdentityRole>()
    // services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

Aşağıdaki kod , LogoutPathve AccessDeniedPathkümelerini LoginPathayarlar:

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = $"/Identity/Account/Login";
    options.LogoutPath = $"/Identity/Account/Logout";
    options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});

Bir IEmailSender uygulamayı kaydedin, örneğin:

// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
    public Task SendEmailAsync(string email, string subject, string message)
    {
        return Task.CompletedTask;
    }
}

Parola yapılandırması

içinde Startup.ConfigureServicesyapılandırıldıysaPasswordOptions,[StringLength] yapı iskelesi sayfalarındaki Identity özellik için Password öznitelik yapılandırması gerekebilir. InputModelPassword özellikleri aşağıdaki dosyalarda bulunur:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Sayfayı devre dışı bırakma

Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu yaklaşım kullanılabilir.

Kullanıcı kaydını devre dışı bırakmak için:

  • yapı iskelesi Identity. Account.Register, Account.Login ve Account.RegisterConfirmation bilgilerini ekleyin. Örneğin:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin Areas/Identity/Pages/Account/Register.cshtml.cs :

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin Areas/Identity/Pages/Account/Register.cshtml :

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Kayıt bağlantısını açıklama satırı veya kaldırma Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Sayfayı güncelleştirin Areas/Identity/Pages/Account/RegisterConfirmation .

    • Cshtml dosyasından kodu ve bağlantıları kaldırın.
    • onay kodunu içinden PageModelkaldırın:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Kullanıcı eklemek için başka bir uygulama kullanma

Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:

  • Ayrılmış bir yönetici web uygulaması.
  • Konsol uygulaması.

Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:

  • Kullanıcıların listesi belleğe okunur.
  • Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
  • Kullanıcı veritabanına eklenir Identity .
  • Kullanıcıya bildirim gönderilir ve parolayı değiştirmesi bildirilir.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Aşağıdaki kod, kullanıcı eklemeyi özetler:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Üretim senaryoları için de benzer bir yaklaşım izlenebilir.

Statik Identity varlıkların yayımlanmasını engelleme

Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.

Ek kaynaklar

ASP.NET Core 2.1 ve sonraki sürümlerde kimlik doğrulama kodunda yapılan değişiklikler