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
- Pengantar ASP.NET Core Identity dan EF Core
- Apa itu ASP.NET Core Identity?
- Apa itu EF Core?
- Mengapa Kustomisasi Identity Penting?
- Menyiapkan Proyek ASP.NET Core
- Membuat Proyek ASP.NET Core Baru
- Menginstal Paket NuGet yang Diperlukan
- Konfigurasi Connection String
- Membuat Kelas Aplikasi Pengguna Khusus
- Memperluas Kelas IdentityUser
- Menambahkan Properti Kustom
- Contoh Properti Kustom: Nama Lengkap, Tanggal Lahir, Alamat
- Membuat Kelas ApplicationDbContext Khusus
- Memperluas Kelas IdentityDbContext
- Mengkonfigurasi Entitas Pengguna Kustom
- Mengatur Skema Database
- Mendaftarkan Layanan Identity di Startup.cs
- Menambahkan Identity ke Kontainer Layanan
- Mengkonfigurasi Opsi Identity
- Menggunakan ApplicationDbContext Kustom
- Membuat Migrasi EF Core
- Menambahkan Migrasi
- Menerapkan Migrasi ke Database
- Menggunakan Package Manager Console atau .NET CLI
- Memperbarui Halaman Registrasi dan Login
- Memodifikasi Model Registrasi
- Memperbarui Tampilan Registrasi
- Menyimpan Properti Kustom ke Database
- Memperbarui Model Login Jika Diperlukan
- Menyesuaikan Kelas dan Tabel Identity Lainnya (Opsional)
- Mengganti IdentityRole dengan Kelas Role Kustom
- Mengganti IdentityUserRole, IdentityUserClaim, dll.
- Mengkonfigurasi Relasi EF Core
- Menambahkan Validasi Kustom
- Membuat Validator Kustom
- Menambahkan Validasi ke Properti Kustom
- Menampilkan Pesan Kesalahan Validasi
- Menerapkan Fitur Tambahan
- Dua Faktor Autentikasi (2FA)
- Autentikasi Eksternal (Google, Facebook, dll.)
- Otorisasi Berbasis Klaim
- Praktik Terbaik dan Pertimbangan Keamanan
- Pentingnya Keamanan Kata Sandi
- Melindungi Data Sensitif
- Mencegah Serangan Umum
- 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.
- 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.
- .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:
- Package Manager Console:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools
- .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
- Package Manager Console:
Add-Migration InitialCreate Update-Database
- .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.
“`