Bagikan melalui


Perancah Identity dalam proyek ASP.NET Core

Oleh Rick Anderson

BlazorIdentity Perancah

perancah ASP.NET Core Identity menambahkan ASP.NET Core Identityke Blazor Web Apps dan Blazor Server aplikasi. Setelah perancah menambahkan IdentityRazor komponen ke aplikasi, Anda dapat menyesuaikan komponen agar sesuai dengan kebutuhan aplikasi Anda.

Meskipun perancah menghasilkan kode C# yang diperlukan untuk perancah Identity ke dalam aplikasi, Anda harus memperbarui database proyek dengan migrasi database Core Entity Framework (EF) untuk menyelesaikan proses. Artikel ini menjelaskan langkah-langkah yang diperlukan untuk memigrasikan database.

Periksa perubahan setelah menjalankan Identity perancah. Sebaiknya gunakan GitHub atau sistem kontrol sumber lain yang menunjukkan perubahan file dengan fitur kembalikan perubahan.

Layanan diperlukan saat menggunakan autentikasi dua faktor (2FA), konfirmasi akun dan pemulihan kata sandi, dan fitur keamanan lainnya dengan Identity. Layanan atau stub layanan tidak dihasilkan saat perancah Identity. Layanan untuk mengaktifkan fitur ini harus ditambahkan secara manual.

RazorPerancah Halaman dan MVC Identity

ASP.NET Core menyediakan ASP.NET Core Identity sebagai Razor pustaka kelas (RCL). Aplikasi yang menyertakan Identity dapat menerapkan perancah untuk secara selektif menambahkan kode sumber yang terkandung dalam Identity RCL. Anda mungkin ingin membuat kode sumber sehingga Anda dapat mengubah kode dan mengubah perilaku. Misalnya, Anda dapat menginstruksikan perancah untuk menghasilkan kode yang digunakan dalam pendaftaran. Kode yang disesuaikan Identity mengambil alih implementasi default yang disediakan oleh Identity RCL. Untuk mendapatkan kontrol penuh atas UI dan tidak menggunakan RCL default, lihat bagian Membuat sumber UI lengkapIdentity.

Aplikasi yang tidak menyertakan autentikasi dapat menerapkan perancah untuk menambahkan paket RCLIdentity. Anda memiliki opsi untuk memilih Identity kode yang akan dibuat.

Meskipun perancah menghasilkan sebagian besar kode yang diperlukan, Anda perlu memperbarui proyek Anda untuk menyelesaikan proses. Dokumen ini menjelaskan langkah-langkah yang Identity diperlukan untuk menyelesaikan pembaruan perancah.

Sebaiknya gunakan sistem kontrol sumber yang menunjukkan perbedaan file dan memungkinkan Anda untuk mundur dari perubahan. Periksa perubahan setelah menjalankan Identity perancah.

Layanan diperlukan saat menggunakan Autentikasi Dua Faktor, Konfirmasi akun dan pemulihan kata sandi, dan fitur keamanan lainnya dengan Identity. Layanan atau stub layanan tidak dihasilkan saat perancah Identity. Layanan untuk mengaktifkan fitur ini harus ditambahkan secara manual. Misalnya, lihat Memerlukan Konfirmasi Email.

Biasanya, aplikasi yang dibuat dengan akun individual tidak boleh membuat konteks data baru.

Perancah Identity ke dalam Blazor proyek

Bagian ini berlaku untuk Blazor Web Apps dan Blazor Server aplikasi.

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Blazor Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanBlazorIdentity:
    • Pilih atau tambahkan dengan tombol plus (+) kelas konteks database (kelas DbContext).
    • Pilih penyedia database (Penyedia database), yang default ke SQL Server.
    • Pilih atau tambahkan dengan tombol plus (+) kelas pengguna (Kelas pengguna).
    • Pilih tombol Tambahkan.

Kode database yang dihasilkan Identity memerlukan EF Core Migrasi. Langkah-langkah berikut menjelaskan cara membuat dan menerapkan migrasi ke database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Aplikasi sisi Blazor klien (Mandiri Blazor WebAssembly)

Aplikasi sisi Blazor klien (Mandiri Blazor WebAssembly) menggunakan pendekatan UI mereka sendiri Identity dan tidak dapat menggunakan perancah ASP.NET Core Identity .

Untuk informasi selengkapnya, lihat Blazor Artikel dan IdentityKeamanan.

Perancah Identity ke dalam Razor proyek tanpa otorisasi yang ada

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Migrasi, UseAuthentication, dan tata letak

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Perubahan tata letak

Opsional: Tambahkan parsial login (_LoginPartial) ke file tata letak:

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

Perancah Identity ke dalam Razor proyek dengan otorisasi

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Perancah Identity ke dalam proyek MVC tanpa otorisasi yang ada

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Opsional: Tambahkan parsial login (_LoginPartial) ke Views/Shared/_Layout.cshtml file:

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

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Tambahkan MapRazorPages ke Program.cs seperti yang ditunjukkan dalam kode yang disorot berikut:

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();

Perancah Identity ke dalam proyek MVC dengan otorisasi

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Membuat sumber UI lengkap Identity

Untuk mempertahankan kontrol Identity penuh UI, jalankan Identity perancah dan pilih Ambil alih semua file.

Konfigurasi kata sandi

Jika PasswordOptions dikonfigurasi dalam Startup.ConfigureServices, [StringLength] konfigurasi atribut mungkin diperlukan untuk Password properti di halaman perancah Identity . InputModelPassword properti ditemukan dalam file berikut:

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

Menonaktifkan halaman

Bagian ini menunjukkan cara menonaktifkan halaman register tetapi pendekatan dapat digunakan untuk menonaktifkan halaman apa pun.

Untuk menonaktifkan pendaftaran pengguna:

  • Perancah Identity. Sertakan Account.Register, Account.Login, dan Account.RegisterConfirmation. Contohnya:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml.cs sehingga pengguna tidak dapat mendaftar dari titik akhir ini:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml agar konsisten dengan perubahan sebelumnya:

    @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>
    
  • Mengomentari atau menghapus tautan pendaftaran dari Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Areas/Identity/Pages/Account/RegisterConfirmation Perbarui halaman.

    • Hapus kode dan tautan dari file cshtml.
    • Hapus kode konfirmasi dari PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Menggunakan aplikasi lain untuk menambahkan pengguna

Berikan mekanisme untuk menambahkan pengguna di luar aplikasi web. Opsi untuk menambahkan pengguna meliputi:

  • Aplikasi web admin khusus.
  • Aplikasi konsol.

Kode berikut menguraikan satu pendekatan untuk menambahkan pengguna:

  • Daftar pengguna dibaca ke dalam memori.
  • Kata sandi unik yang kuat dihasilkan untuk setiap pengguna.
  • Pengguna ditambahkan ke Identity database.
  • Pengguna diberi tahu dan diberitahu untuk mengubah kata sandi.
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>();
            });
}

Kode berikut menguraikan penambahan pengguna:


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;
}

Pendekatan serupa dapat diikuti untuk skenario produksi.

Mencegah penerbitan aset statis Identity

Untuk mencegah penerbitan aset statis Identity ke akar web, lihat Pengenalan Identity ASP.NET Core.

ASP.NET Core menyediakan ASP.NET Core Identity sebagai Razor pustaka kelas (RCL). Aplikasi yang menyertakan Identity dapat menerapkan perancah untuk secara selektif menambahkan kode sumber yang terkandung dalam Identity RCL. Anda mungkin ingin membuat kode sumber sehingga Anda dapat mengubah kode dan mengubah perilaku. Misalnya, Anda dapat menginstruksikan perancah untuk menghasilkan kode yang digunakan dalam pendaftaran. Kode yang dihasilkan lebih diutamakan daripada kode yang sama dalam Identity RCL. Untuk mendapatkan kontrol penuh atas UI dan tidak menggunakan RCL default, lihat bagian Membuat sumber UI penuhIdentity.

Aplikasi yang tidak menyertakan autentikasi dapat menerapkan perancah untuk menambahkan paket RCLIdentity. Anda memiliki opsi untuk memilih Identity kode yang akan dibuat.

Meskipun perancah menghasilkan sebagian besar kode yang diperlukan, Anda perlu memperbarui proyek Anda untuk menyelesaikan proses. Dokumen ini menjelaskan langkah-langkah yang Identity diperlukan untuk menyelesaikan pembaruan perancah.

Sebaiknya gunakan sistem kontrol sumber yang menunjukkan perbedaan file dan memungkinkan Anda untuk mundur dari perubahan. Periksa perubahan setelah menjalankan Identity perancah.

Layanan diperlukan saat menggunakan Autentikasi Dua Faktor, Konfirmasi akun dan pemulihan kata sandi, dan fitur keamanan lainnya dengan Identity. Layanan atau stub layanan tidak dihasilkan saat perancah Identity. Layanan untuk mengaktifkan fitur ini harus ditambahkan secara manual. Misalnya, lihat Memerlukan Konfirmasi Email.

Biasanya, aplikasi yang dibuat dengan akun individual tidak boleh membuat konteks data baru.

Perancah Identity ke dalam Razor proyek tanpa otorisasi yang ada

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Migrasi, UseAuthentication, dan tata letak

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Perubahan tata letak

Opsional: Tambahkan parsial login (_LoginPartial) ke file tata letak:

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

Perancah Identity ke dalam Razor proyek dengan otorisasi

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Perancah Identity ke dalam proyek MVC tanpa otorisasi yang ada

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Opsional: Tambahkan parsial login (_LoginPartial) ke Views/Shared/_Layout.cshtml file:

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

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Tambahkan MapRazorPages ke Program.cs seperti yang ditunjukkan dalam kode yang disorot berikut:

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();

Perancah Identity ke dalam proyek MVC dengan otorisasi

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Perancah Identity ke dalam aplikasi sisi Blazor server dengan otorisasi

Microsoft.VisualStudio.Web.CodeGeneration.Design Instal paket NuGet.

Catatan

Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.


Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Migrasi

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Titik akhir autentikasi gaya

Karena aplikasi sisi Blazor server menggunakan Razor halaman Pages Identity , gaya UI berubah saat pengunjung menavigasi antara Identity halaman dan komponen. Anda memiliki dua opsi untuk mengatasi gaya inkongruous:

Komponen kustom Identity

ASP.NET Core Identity dirancang untuk bekerja dalam konteks permintaan HTTP dan komunikasi respons, yang bukan model komunikasi server klien utama dalam Blazor aplikasi. Aplikasi ASP.NET Core yang menggunakan ASP.NET Core Identity untuk manajemen pengguna harus menggunakan Halaman Razor, bukan komponen Razor untuk UI terkait Identity, seperti pendaftaran pengguna, masuk, keluar, dan tugas manajemen pengguna lainnya.

Karena SignInManager<TUser> dan UserManager<TUser> tidak didukung dalam Razor komponen, sebaiknya gunakan API web untuk mengelola Identity tindakan dari Razor komponen melalui aplikasi ASP.NET Core yang diaktifkan sisi Identityserver. Untuk panduan tentang membuat API web untuk Blazor aplikasi, lihat Memanggil API web dari aplikasi ASP.NET CoreBlazor.

Pendekatan untuk menggunakan Razor komponen alih-alih Identity Razor halaman adalah membangun komponen kustom IdentityRazor Anda sendiri, tetapi Microsoft tidak merekomendasikan atau mendukung pendekatan tersebut. Untuk konteks tambahan, jelajahi diskusi berikut. Dalam diskusi berikut, contoh kode dalam komentar masalah dan contoh kode yang ditautkan silang di repositori GitHub non-Microsoft tidak didukung oleh Microsoft tetapi mungkin berguna bagi beberapa pengembang:

Untuk bantuan tambahan saat berusaha membangun komponen kustom IdentityRazor atau mencari komponen pihak Razor ketiga, kami merekomendasikan sumber daya berikut:

Menggunakan tata letak kustom dengan Blazor gaya aplikasi

Tata Identity letak dan gaya halaman dapat dimodifikasi untuk menghasilkan halaman yang menggunakan gaya yang mirip dengan tema default Blazor . Pendekatan ini tidak tercakup dalam dokumentasi.

Aplikasi sisi Blazor klien

Aplikasi sisi Blazor klien menggunakan pendekatan UI mereka sendiri Identity dan tidak dapat menggunakan perancah ASP.NET Core Identity . Aplikasi sisi server ASP.NET Core dari solusi yang dihosting Blazor dapat mengikuti Razor panduan Pages/MVC dalam artikel ini dan dikonfigurasi sama seperti jenis aplikasi ASP.NET Core lainnya yang mendukung Identity.

Blazor Kerangka kerja tidak menyertakan Razor versi Identity komponen halaman UI. Identity Komponen UI Razor dapat dibuat khusus atau diperoleh dari sumber pihak ketiga yang tidak didukung.

Untuk informasi selengkapnya, lihat Blazor Artikel dan IdentityKeamanan.

Membuat sumber UI lengkap Identity

Untuk mempertahankan kontrol Identity penuh UI, jalankan Identity perancah dan pilih Ambil alih semua file.

Konfigurasi kata sandi

Jika PasswordOptions dikonfigurasi dalam Startup.ConfigureServices, [StringLength] konfigurasi atribut mungkin diperlukan untuk Password properti di halaman perancah Identity . InputModelPassword properti ditemukan dalam file berikut:

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

Menonaktifkan halaman

Bagian ini menunjukkan cara menonaktifkan halaman register tetapi pendekatan dapat digunakan untuk menonaktifkan halaman apa pun.

Untuk menonaktifkan pendaftaran pengguna:

  • Perancah Identity. Sertakan Account.Register, Account.Login, dan Account.RegisterConfirmation. Contohnya:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml.cs sehingga pengguna tidak dapat mendaftar dari titik akhir ini:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml agar konsisten dengan perubahan sebelumnya:

    @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>
    
  • Mengomentari atau menghapus tautan pendaftaran dari Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Areas/Identity/Pages/Account/RegisterConfirmation Perbarui halaman.

    • Hapus kode dan tautan dari file cshtml.
    • Hapus kode konfirmasi dari PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Menggunakan aplikasi lain untuk menambahkan pengguna

Berikan mekanisme untuk menambahkan pengguna di luar aplikasi web. Opsi untuk menambahkan pengguna meliputi:

  • Aplikasi web admin khusus.
  • Aplikasi konsol.

Kode berikut menguraikan satu pendekatan untuk menambahkan pengguna:

  • Daftar pengguna dibaca ke dalam memori.
  • Kata sandi unik yang kuat dihasilkan untuk setiap pengguna.
  • Pengguna ditambahkan ke Identity database.
  • Pengguna diberi tahu dan diberitahu untuk mengubah kata sandi.
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>();
            });
}

Kode berikut menguraikan penambahan pengguna:


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;
}

Pendekatan serupa dapat diikuti untuk skenario produksi.

Mencegah penerbitan aset statis Identity

Untuk mencegah penerbitan aset statis Identity ke akar web, lihat Pengenalan Identity ASP.NET Core.

ASP.NET Core menyediakan ASP.NET Core Identity sebagai Razor pustaka kelas (RCL). Aplikasi yang menyertakan Identity dapat menerapkan perancah untuk secara selektif menambahkan kode sumber yang terkandung dalam Identity RCL. Anda mungkin ingin membuat kode sumber sehingga Anda dapat mengubah kode dan mengubah perilaku. Misalnya, Anda dapat menginstruksikan perancah untuk menghasilkan kode yang digunakan dalam pendaftaran. Kode yang dihasilkan lebih diutamakan daripada kode yang sama dalam Identity RCL. Untuk mendapatkan kontrol penuh atas UI dan tidak menggunakan RCL default, lihat bagian Membuat sumber UI penuhIdentity.

Aplikasi yang tidak menyertakan autentikasi dapat menerapkan perancah untuk menambahkan paket RCLIdentity. Anda memiliki opsi untuk memilih Identity kode yang akan dibuat.

Meskipun perancah menghasilkan sebagian besar kode yang diperlukan, Anda perlu memperbarui proyek Anda untuk menyelesaikan proses. Dokumen ini menjelaskan langkah-langkah yang Identity diperlukan untuk menyelesaikan pembaruan perancah.

Sebaiknya gunakan sistem kontrol sumber yang menunjukkan perbedaan file dan memungkinkan Anda untuk mundur dari perubahan. Periksa perubahan setelah menjalankan Identity perancah.

Layanan diperlukan saat menggunakan Autentikasi Dua Faktor, Konfirmasi akun dan pemulihan kata sandi, dan fitur keamanan lainnya dengan Identity. Layanan atau stub layanan tidak dihasilkan saat perancah Identity. Layanan untuk mengaktifkan fitur ini harus ditambahkan secara manual. Misalnya, lihat Memerlukan Konfirmasi Email.

Saat perancah Identity dengan konteks data baru ke dalam proyek dengan akun individual yang ada, buka Startup.ConfigureServices dan hapus panggilan ke:

  • AddDbContext
  • AddDefaultIdentity

Misalnya, AddDbContext dan AddDefaultIdentity dikomentari dalam kode berikut:

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();
}

Kode sebelumnya mengomentari kode yang diduplikasi di Areas/Identity/IdentityHostingStartup.cs

Biasanya, aplikasi yang dibuat dengan akun individual tidak boleh membuat konteks data baru.

Perancah Identity ke dalam proyek kosong

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Startup Perbarui kelas dengan kode yang mirip dengan yang berikut ini:

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 disarankan tetapi tidak diperlukan. Untuk informasi selengkapnya, lihat Protokol Keamanan Transportasi Ketat HTTP.

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Perancah Identity ke dalam Razor proyek tanpa otorisasi yang ada

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Identity dikonfigurasi di Areas/Identity/IdentityHostingStartup.cs. Untuk informasi selengkapnya, lihat IHostingStartup .

Migrasi, UseAuthentication, dan tata letak

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Aktifkan autentikasi

Startup Perbarui kelas dengan kode yang mirip dengan yang berikut ini:

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 disarankan tetapi tidak diperlukan. Untuk informasi selengkapnya, lihat Protokol Keamanan Transportasi Ketat HTTP.

Perubahan tata letak

Opsional: Tambahkan parsial login (_LoginPartial) ke file tata letak:

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

Perancah Identity ke dalam Razor proyek dengan otorisasi

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Beberapa Identity opsi dikonfigurasi di Areas/Identity/IdentityHostingStartup.cs. Untuk informasi selengkapnya, lihat IHostingStartup .

Perancah Identity ke dalam proyek MVC tanpa otorisasi yang ada

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Opsional: Tambahkan parsial login (_LoginPartial) ke Views/Shared/_Layout.cshtml file:

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

Pindahkan Pages/Shared/_LoginPartial.cshtml file ke Views/Shared/_LoginPartial.cshtml.

Identity dikonfigurasi di Areas/Identity/IdentityHostingStartup.cs. Untuk informasi selengkapnya, lihat IHostingStartup .

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Startup Perbarui kelas dengan kode yang mirip dengan yang berikut ini:

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 disarankan tetapi tidak diperlukan. Untuk informasi selengkapnya, lihat Protokol Keamanan Transportasi Ketat HTTP.

Perancah Identity ke dalam proyek MVC dengan otorisasi

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Perancah Identity ke dalam aplikasi sisi Blazor server tanpa otorisasi yang ada

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Identity dikonfigurasi di Areas/Identity/IdentityHostingStartup.cs. Untuk informasi selengkapnya, lihat IHostingStartup .

Migrasi

Kode database yang dihasilkan Identity memerlukan Migrasi Inti Kerangka Kerja Entitas (EF). Jika migrasi untuk menghasilkan Identity skema belum dibuat dan diterapkan ke database, buat migrasi dan perbarui database.

Visual Studio Connected Services digunakan untuk menambahkan EF Core migrasi dan memperbarui database.

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti dengan Tambahkan migrasi.

Beri nama migrasi Migrasi, seperti CreateIdentitySchema, yang merupakan nama yang menjelaskan migrasi. Tunggu hingga konteks database dimuat di bidang nama kelas DbContext, yang mungkin memakan waktu beberapa detik. Pilih Selesai untuk membuat migrasi.

Pilih tombol Tutup setelah operasi selesai.

Pilih elipsis (...) lagi diikuti oleh perintah Perbarui database .

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Perintah database pembaruan menjalankan Up migrasi metode yang belum diterapkan dalam file kode migrasi yang dibuat oleh perancah. Dalam hal ini, perintah menjalankan Up metode dalam Migrations/{TIME STAMP}_{MIGRATION NAME}.cs file, yang membuat Identity tabel, batasan, dan indeks. Tempat {TIME STAMP} penampung adalah stempel waktu, dan {MIGRATION NAME} tempat penampung adalah nama migrasi.

Identity Jika skema telah dibuat tetapi tidak diterapkan ke database, hanya perintah untuk memperbarui database yang harus dijalankan:

Di Penjelajah Solusi, klik dua kali Layanan Tersambung. Di area SQL Server Express LocalDB dependensi layanan, pilih elipsis (...) diikuti oleh perintah Perbarui database.

Dialog Perbarui database dengan migrasi terbaru terbuka. Tunggu hingga bidang nama kelas DbContext diperbarui dan agar migrasi sebelumnya dimuat, yang mungkin memakan waktu beberapa detik. Klik tombol Selesai.

Pilih tombol Tutup setelah operasi selesai.

Anda dapat mengonfirmasi aplikasi Identity skema dengan perintah berikut. Output perintah menyertakan kolom "applied" untuk menunjukkan migrasi mana yang diterapkan ke database.

Di Konsol Manajer Paket Visual Studio, jalankan Get-Migration:

Get-Migration

Jika ada lebih dari satu konteks database, tentukan konteks dengan -Context parameter .

Titik akhir autentikasi gaya

Karena aplikasi sisi Blazor server menggunakan Razor halaman Pages Identity , gaya UI berubah saat pengunjung menavigasi antara Identity halaman dan komponen. Anda memiliki dua opsi untuk mengatasi gaya inkongruous:

Komponen kustom Identity

Pendekatan untuk menggunakan komponen alih-alih Identity halaman adalah membangun Identity komponen. Karena SignInManager dan UserManager tidak didukung dalam Razor komponen, gunakan titik akhir API web di Blazor aplikasi untuk memproses tindakan akun pengguna.

Menggunakan tata letak kustom dengan Blazor gaya aplikasi

Tata Identity letak dan gaya halaman dapat dimodifikasi untuk menghasilkan halaman yang menggunakan gaya yang mirip dengan tema default Blazor . Pendekatan ini tidak tercakup dalam dokumentasi.

Perancah Identity ke dalam aplikasi sisi Blazor server dengan otorisasi

Jalankan Identity perancah:

  • Dari Penjelajah Solusi, klik kanan proyek >Tambahkan>Item Perancah Baru.
  • Dari panel kiri dialog Tambahkan Item Perancah Baru, pilih Identity. Pilih Identity di panel tengah. Pilih tombol Tambahkan.
  • Dalam dialog TambahkanIdentity, pilih opsi yang Anda inginkan.
    • Jika Anda memiliki halaman tata letak yang sudah ada dan dikustomisasi untuk Identity (_Layout.cshtml), pilih halaman tata letak yang ada untuk menghindari penimpaan tata letak Anda dengan markup yang salah oleh perancah. Misalnya, pilih:
      • Pages/Shared/_Layout.cshtml untuk Razor Halaman atau Blazor Server proyek dengan infrastruktur Halaman yang Razor sudah ada.
      • Views/Shared/_Layout.cshtml untuk proyek atau Blazor Server proyek MVC dengan infrastruktur MVC yang ada.
    • Untuk konteks data (kelas DbContext):
      • Pilih kelas konteks data Anda. Anda harus memilih setidaknya satu file untuk menambahkan konteks data Anda.
      • Untuk membuat konteks data dan mungkin membuat kelas pengguna baru untuk Identity, pilih tombol + . Terima nilai default atau tentukan kelas (misalnya, Contoso.Data.ApplicationDbContext untuk perusahaan bernama "Contoso"). Untuk membuat kelas pengguna baru, pilih tombol + untuk Kelas pengguna dan tentukan kelas (misalnya, ContosoUser untuk perusahaan bernama "Contoso").
    • Pilih tombol Tambahkan untuk menjalankan perancah.

Beberapa Identity opsi dikonfigurasi di Areas/Identity/IdentityHostingStartup.cs. Untuk informasi selengkapnya, lihat IHostingStartup .

Aplikasi sisi Blazor klien

Aplikasi sisi Blazor klien menggunakan pendekatan UI mereka sendiri Identity dan tidak dapat menggunakan perancah ASP.NET Core Identity . Aplikasi sisi server ASP.NET Core dari solusi yang dihosting Blazor dapat mengikuti Razor panduan Pages/MVC dalam artikel ini dan dikonfigurasi sama seperti jenis aplikasi ASP.NET Core lainnya yang mendukung Identity.

Blazor Kerangka kerja tidak menyertakan Razor versi Identity komponen halaman UI. Identity Komponen UI Razor dapat dibuat khusus atau diperoleh dari sumber pihak ketiga yang tidak didukung.

Untuk informasi selengkapnya, lihat Blazor Artikel dan IdentityKeamanan.

Membuat sumber UI lengkap Identity

Untuk mempertahankan kontrol Identity penuh UI, jalankan Identity perancah dan pilih Ambil alih semua file.

Kode yang disorot berikut menunjukkan perubahan untuk mengganti UI default Identity dengan Identity di aplikasi web ASP.NET Core 2.1. Anda mungkin ingin melakukan ini untuk memiliki kontrol penuh atas Identity UI.

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>();
}

Default Identity diganti dalam kode berikut:

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

Kode berikut menetapkan LoginPath, , LogoutPathdan AccessDeniedPath):

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

IEmailSender Daftarkan implementasi, misalnya:

// 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;
    }
}

Konfigurasi kata sandi

Jika PasswordOptions dikonfigurasi dalam Startup.ConfigureServices, [StringLength] konfigurasi atribut mungkin diperlukan untuk Password properti di halaman perancah Identity . InputModelPassword properti ditemukan dalam file berikut:

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

Menonaktifkan halaman

Bagian ini menunjukkan cara menonaktifkan halaman register tetapi pendekatan dapat digunakan untuk menonaktifkan halaman apa pun.

Untuk menonaktifkan pendaftaran pengguna:

  • Perancah Identity. Sertakan Account.Register, Account.Login, dan Account.RegisterConfirmation. Contohnya:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml.cs sehingga pengguna tidak dapat mendaftar dari titik akhir ini:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Pembaruan Areas/Identity/Pages/Account/Register.cshtml agar konsisten dengan perubahan sebelumnya:

    @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>
    
  • Mengomentari atau menghapus tautan pendaftaran dari Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Areas/Identity/Pages/Account/RegisterConfirmation Perbarui halaman.

    • Hapus kode dan tautan dari file cshtml.
    • Hapus kode konfirmasi dari PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Menggunakan aplikasi lain untuk menambahkan pengguna

Berikan mekanisme untuk menambahkan pengguna di luar aplikasi web. Opsi untuk menambahkan pengguna meliputi:

  • Aplikasi web admin khusus.
  • Aplikasi konsol.

Kode berikut menguraikan satu pendekatan untuk menambahkan pengguna:

  • Daftar pengguna dibaca ke dalam memori.
  • Kata sandi unik yang kuat dihasilkan untuk setiap pengguna.
  • Pengguna ditambahkan ke Identity database.
  • Pengguna diberi tahu dan diberitahu untuk mengubah kata sandi.
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>();
            });
}

Kode berikut menguraikan penambahan pengguna:


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;
}

Pendekatan serupa dapat diikuti untuk skenario produksi.

Mencegah penerbitan aset statis Identity

Untuk mencegah penerbitan aset statis Identity ke akar web, lihat Pengenalan Identity ASP.NET Core.

Sumber Daya Tambahan:

Perubahan pada kode autentikasi ke ASP.NET Core 2.1 dan yang lebih baru