Thursday

19-06-2025 Vol 19

How to Customize ASP.NET Core Identity With EF Core for Your Project Needs

Cara Kustomisasi ASP.NET Core Identity dengan EF Core untuk Kebutuhan Proyek Anda

ASP.NET Core Identity adalah sistem keanggotaan yang kuat dan fleksibel untuk mengelola autentikasi dan otorisasi pengguna dalam aplikasi web Anda. Dengan menggunakan Entity Framework (EF) Core, Anda dapat menyesuaikan Identity untuk memenuhi kebutuhan spesifik proyek Anda. Artikel ini akan memandu Anda melalui proses kustomisasi ASP.NET Core Identity dengan EF Core, termasuk cara menambahkan properti khusus ke pengguna, mengganti kelas dan tabel default, serta memperluas fungsionalitas Identity.

Daftar Isi

  1. Pengantar ASP.NET Core Identity dan EF Core
    • Apa itu ASP.NET Core Identity?
    • Apa itu EF Core?
    • Mengapa Kustomisasi Identity Penting?
  2. Menyiapkan Proyek ASP.NET Core
    • Membuat Proyek ASP.NET Core Baru
    • Menginstal Paket NuGet yang Diperlukan
    • Konfigurasi Connection String
  3. Membuat Kelas Aplikasi Pengguna Khusus
    • Memperluas Kelas IdentityUser
    • Menambahkan Properti Kustom
    • Contoh Properti Kustom: Nama Lengkap, Tanggal Lahir, Alamat
  4. Membuat Kelas ApplicationDbContext Khusus
    • Memperluas Kelas IdentityDbContext
    • Mengkonfigurasi Entitas Pengguna Kustom
    • Mengatur Skema Database
  5. Mendaftarkan Layanan Identity di Startup.cs
    • Menambahkan Identity ke Kontainer Layanan
    • Mengkonfigurasi Opsi Identity
    • Menggunakan ApplicationDbContext Kustom
  6. Membuat Migrasi EF Core
    • Menambahkan Migrasi
    • Menerapkan Migrasi ke Database
    • Menggunakan Package Manager Console atau .NET CLI
  7. Memperbarui Halaman Registrasi dan Login
    • Memodifikasi Model Registrasi
    • Memperbarui Tampilan Registrasi
    • Menyimpan Properti Kustom ke Database
    • Memperbarui Model Login Jika Diperlukan
  8. Menyesuaikan Kelas dan Tabel Identity Lainnya (Opsional)
    • Mengganti IdentityRole dengan Kelas Role Kustom
    • Mengganti IdentityUserRole, IdentityUserClaim, dll.
    • Mengkonfigurasi Relasi EF Core
  9. Menambahkan Validasi Kustom
    • Membuat Validator Kustom
    • Menambahkan Validasi ke Properti Kustom
    • Menampilkan Pesan Kesalahan Validasi
  10. Menerapkan Fitur Tambahan
    • Dua Faktor Autentikasi (2FA)
    • Autentikasi Eksternal (Google, Facebook, dll.)
    • Otorisasi Berbasis Klaim
  11. Praktik Terbaik dan Pertimbangan Keamanan
    • Pentingnya Keamanan Kata Sandi
    • Melindungi Data Sensitif
    • Mencegah Serangan Umum
  12. Kesimpulan

1. Pengantar ASP.NET Core Identity dan EF Core

Apa itu ASP.NET Core Identity?

ASP.NET Core Identity adalah kerangka kerja yang menyediakan fungsionalitas lengkap untuk mengelola autentikasi dan otorisasi pengguna. Ini mencakup fitur-fitur seperti registrasi pengguna, login, manajemen kata sandi, peran, klaim, dan banyak lagi. Identity dirancang agar fleksibel dan dapat disesuaikan, sehingga Anda dapat menyesuaikannya dengan kebutuhan spesifik aplikasi Anda.

Apa itu EF Core?

EF Core (Entity Framework Core) adalah ORM (Object-Relational Mapper) yang ringan, dapat diperluas, dan lintas platform untuk .NET. EF Core memungkinkan Anda bekerja dengan database menggunakan objek .NET, menghilangkan kebutuhan untuk menulis kode SQL secara manual. Ini mendukung berbagai database, termasuk SQL Server, PostgreSQL, MySQL, dan SQLite.

Mengapa Kustomisasi Identity Penting?

Sistem Identity default mungkin tidak selalu memenuhi semua kebutuhan proyek Anda. Mungkin Anda perlu menambahkan properti khusus ke pengguna (misalnya, nama lengkap, tanggal lahir), atau mungkin Anda ingin menggunakan skema database yang berbeda. Kustomisasi Identity memungkinkan Anda untuk:

  • Menambahkan properti khusus ke pengguna yang relevan dengan bisnis Anda.
  • Mengontrol skema database yang digunakan oleh Identity.
  • Mengintegrasikan Identity dengan sistem autentikasi dan otorisasi yang ada.
  • Meningkatkan keamanan dan kinerja aplikasi Anda.

2. Menyiapkan Proyek ASP.NET Core

Membuat Proyek ASP.NET Core Baru

Anda dapat membuat proyek ASP.NET Core baru menggunakan Visual Studio, .NET CLI, atau IDE lain yang kompatibel.

  1. Visual Studio:
    • Buka Visual Studio.
    • Pilih “Create a new project”.
    • Cari dan pilih “ASP.NET Core Web App”.
    • Beri nama proyek Anda dan pilih lokasi.
    • Pilih templat “Web App (Model-View-Controller)” atau “Web API”, tergantung pada jenis aplikasi yang Anda inginkan.
    • Pastikan untuk memilih “.NET Core” sebagai kerangka kerja target.
  2. .NET CLI:
    dotnet new mvc -n YourProjectName

    atau

    dotnet new webapi -n YourProjectName

Menginstal Paket NuGet yang Diperlukan

Anda perlu menginstal paket NuGet berikut untuk menggunakan ASP.NET Core Identity dan EF Core:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer (atau penyedia database lain yang Anda gunakan)
  • Microsoft.EntityFrameworkCore.Tools (untuk migrasi)

Anda dapat menginstal paket-paket ini menggunakan Package Manager Console di Visual Studio atau .NET CLI:

  1. Package Manager Console:
    Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
    Install-Package Microsoft.EntityFrameworkCore.SqlServer
    Install-Package Microsoft.EntityFrameworkCore.Tools
  2. .NET CLI:
    dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    dotnet add package Microsoft.EntityFrameworkCore.Tools

Konfigurasi Connection String

Connection string menentukan bagaimana aplikasi Anda terhubung ke database. Anda perlu mengkonfigurasi connection string di file appsettings.json Anda:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Pastikan untuk mengganti YourDatabaseName dengan nama database yang Anda inginkan.

3. Membuat Kelas Aplikasi Pengguna Khusus

Memperluas Kelas IdentityUser

Untuk menambahkan properti khusus ke pengguna, Anda perlu membuat kelas yang memperluas kelas IdentityUser. Kelas IdentityUser menyediakan properti dasar seperti Id, UserName, Email, dan PasswordHash.

Menambahkan Properti Kustom

Anda dapat menambahkan properti apa pun yang Anda butuhkan ke kelas pengguna kustom Anda. Contohnya:

Contoh Properti Kustom: Nama Lengkap, Tanggal Lahir, Alamat

using Microsoft.AspNetCore.Identity;

public class ApplicationUser : IdentityUser
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public DateTime DateOfBirth { get; set; }
  public string Address { get; set; }

  public string FullName
  {
    get
    {
      return $"{FirstName} {LastName}";
    }
  }
}

Dalam contoh ini, kita menambahkan properti FirstName, LastName, DateOfBirth, dan Address ke kelas ApplicationUser. Kita juga menambahkan properti baca-saja FullName yang mengembalikan nama lengkap pengguna.

4. Membuat Kelas ApplicationDbContext Khusus

Memperluas Kelas IdentityDbContext

Untuk menggunakan kelas pengguna kustom Anda, Anda perlu membuat kelas DbContext kustom yang memperluas kelas IdentityDbContext<ApplicationUser>. Kelas IdentityDbContext menyediakan integrasi dengan Identity dan EF Core.

Mengkonfigurasi Entitas Pengguna Kustom

Anda perlu mengkonfigurasi kelas pengguna kustom Anda di konstruktor kelas ApplicationDbContext.

Mengatur Skema Database

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
  public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
      : base(options)
  {
  }

  protected override void OnModelCreating(ModelBuilder builder)
  {
    base.OnModelCreating(builder);
    // Customize the ASP.NET Identity model and override the defaults if needed.
    // For example, you can rename the ASP.NET Identity table names and more.
    // Add your customizations after calling base.OnModelCreating(builder);

    builder.Entity<ApplicationUser>().ToTable("Users"); // Contoh: mengubah nama tabel
  }
}

Dalam contoh ini, kita mengganti metode OnModelCreating untuk mengkonfigurasi entitas ApplicationUser. Kita juga dapat mengubah nama tabel Identity secara default.

5. Mendaftarkan Layanan Identity di Startup.cs

Menambahkan Identity ke Kontainer Layanan

Anda perlu menambahkan layanan Identity ke kontainer layanan di metode ConfigureServices di file Startup.cs Anda.

Mengkonfigurasi Opsi Identity

Anda dapat mengkonfigurasi berbagai opsi Identity, seperti persyaratan kata sandi, pengaturan cookie, dan lainnya.

Menggunakan ApplicationDbContext Kustom

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using YourProjectName.Data; // Ganti dengan namespace yang sesuai

public void ConfigureServices(IServiceCollection services)
{
  services.AddDbContext<ApplicationDbContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

  services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
      .AddEntityFrameworkStores<ApplicationDbContext>();

  services.AddControllersWithViews();
  services.AddRazorPages();
}

Dalam contoh ini, kita mendaftarkan ApplicationDbContext kustom kita dan mengkonfigurasi Identity untuk menggunakan kelas ApplicationUser kustom kita. Kita juga mengkonfigurasi persyaratan akun terkonfirmasi untuk login.

6. Membuat Migrasi EF Core

Menambahkan Migrasi

Setelah mengkonfigurasi kelas pengguna dan konteks database kustom Anda, Anda perlu membuat migrasi EF Core untuk memperbarui skema database Anda.

Menerapkan Migrasi ke Database

Setelah membuat migrasi, Anda perlu menerapkannya ke database Anda.

Menggunakan Package Manager Console atau .NET CLI

  1. Package Manager Console:
    Add-Migration InitialCreate
    Update-Database
  2. .NET CLI:
    dotnet ef migrations add InitialCreate
    dotnet ef database update

Perintah Add-Migration membuat file migrasi yang berisi perubahan skema database Anda. Perintah Update-Database menerapkan migrasi ke database Anda.

7. Memperbarui Halaman Registrasi dan Login

Memodifikasi Model Registrasi

Anda perlu memodifikasi model registrasi Anda untuk menyertakan properti khusus yang Anda tambahkan ke kelas ApplicationUser Anda.

Memperbarui Tampilan Registrasi

Anda perlu memperbarui tampilan registrasi Anda untuk menampilkan bidang untuk properti khusus yang Anda tambahkan.

Menyimpan Properti Kustom ke Database

Anda perlu memperbarui kode registrasi Anda untuk menyimpan nilai properti khusus ke database.

Memperbarui Model Login Jika Diperlukan

Jika Anda perlu menggunakan properti kustom untuk login (selain dari username/email dan password), Anda mungkin perlu memperbarui model login Anda.

// Contoh di controller pendaftaran
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
  if (ModelState.IsValid)
  {
    var user = new ApplicationUser
    {
      UserName = model.Email,
      Email = model.Email,
      FirstName = model.FirstName,
      LastName = model.LastName,
      DateOfBirth = model.DateOfBirth,
      Address = model.Address
    };

    var result = await _userManager.CreateAsync(user, model.Password);

    if (result.Succeeded)
    {
      await _signInManager.SignInAsync(user, isPersistent: false);
      return RedirectToAction("Index", "Home");
    }

    foreach (var error in result.Errors)
    {
      ModelState.AddModelError("", error.Description);
    }
  }

  return View(model);
}

Dalam contoh ini, kita mengambil nilai dari properti khusus dari model registrasi dan menyimpannya ke database saat kita membuat pengguna baru.

8. Menyesuaikan Kelas dan Tabel Identity Lainnya (Opsional)

Mengganti IdentityRole dengan Kelas Role Kustom

Anda dapat mengganti kelas IdentityRole dengan kelas role kustom Anda jika Anda perlu menambahkan properti khusus ke peran.

Mengganti IdentityUserRole, IdentityUserClaim, dll.

Anda juga dapat mengganti kelas lain yang terkait dengan Identity, seperti IdentityUserRole, IdentityUserClaim, dll., jika Anda perlu menyesuaikan perilaku mereka.

Mengkonfigurasi Relasi EF Core

Saat Anda menyesuaikan kelas Identity, Anda mungkin perlu mengkonfigurasi relasi EF Core antara entitas Anda.

9. Menambahkan Validasi Kustom

Membuat Validator Kustom

Anda dapat membuat validator kustom untuk memvalidasi properti khusus yang Anda tambahkan ke kelas ApplicationUser Anda. Gunakan FluentValidation untuk membuat validasi yang lebih mudah dan terstruktur.

Menambahkan Validasi ke Properti Kustom

Anda dapat menambahkan validasi ke properti kustom Anda menggunakan anotasi data atau FluentValidation.

Menampilkan Pesan Kesalahan Validasi

Anda perlu memastikan bahwa pesan kesalahan validasi ditampilkan dengan benar di tampilan Anda.

public class ApplicationUserValidator : AbstractValidator<ApplicationUser>
{
  public ApplicationUserValidator()
  {
    RuleFor(x => x.FirstName).NotEmpty().WithMessage("Nama depan harus diisi.");
    RuleFor(x => x.LastName).NotEmpty().WithMessage("Nama belakang harus diisi.");
    RuleFor(x => x.DateOfBirth).LessThan(DateTime.Now.AddYears(-18)).WithMessage("Anda harus berusia minimal 18 tahun.");
  }
}

10. Menerapkan Fitur Tambahan

Dua Faktor Autentikasi (2FA)

2FA menambahkan lapisan keamanan tambahan ke akun pengguna Anda dengan mengharuskan mereka untuk memberikan kode verifikasi dari perangkat lain selain kata sandi mereka.

Autentikasi Eksternal (Google, Facebook, dll.)

Autentikasi eksternal memungkinkan pengguna untuk masuk ke aplikasi Anda menggunakan akun yang sudah mereka miliki di penyedia lain, seperti Google, Facebook, atau Twitter.

Otorisasi Berbasis Klaim

Otorisasi berbasis klaim memungkinkan Anda untuk mengontrol akses ke sumber daya berdasarkan klaim yang dimiliki oleh pengguna. Klaim adalah pernyataan tentang pengguna, seperti peran mereka, izin mereka, atau atribut lainnya.

11. Praktik Terbaik dan Pertimbangan Keamanan

Pentingnya Keamanan Kata Sandi

Pastikan untuk menggunakan algoritma hashing kata sandi yang kuat dan menerapkan kebijakan kata sandi yang ketat untuk melindungi kata sandi pengguna.

Melindungi Data Sensitif

Enkripsi data sensitif, seperti informasi pribadi pengguna, untuk mencegah akses yang tidak sah.

Mencegah Serangan Umum

Lindungi aplikasi Anda dari serangan umum, seperti serangan SQL injection, serangan cross-site scripting (XSS), dan serangan cross-site request forgery (CSRF).

Kesimpulan

Kustomisasi ASP.NET Core Identity dengan EF Core memungkinkan Anda untuk menyesuaikan sistem keanggotaan aplikasi Anda dengan kebutuhan spesifik proyek Anda. Dengan mengikuti langkah-langkah yang diuraikan dalam artikel ini, Anda dapat menambahkan properti khusus ke pengguna, mengganti kelas dan tabel default, dan memperluas fungsionalitas Identity. Ingatlah untuk selalu memprioritaskan keamanan dan menerapkan praktik terbaik untuk melindungi data pengguna Anda.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *