Tích hợp Identity Framework để quản lý User & Role trong C# – Phần 22

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Tích hợp Identity Framework để quản lý User & Role trong C# – Phần 22

 

Tích hợp Identity Framework để quản lý User & Role trong C# – Phần 22

1. Giới thiệu về Identity Framework

✅ ASP.NET Core Identity là một framework mạnh mẽ để quản lý User, Role và Authentication.
✅ Hỗ trợ đăng nhập, đăng ký, phân quyền, reset mật khẩu, xác thực 2 bước (2FA), v.v.
✅ Tích hợp dễ dàng với Entity Framework Core để lưu thông tin người dùng vào database.

📌 Lợi ích khi sử dụng Identity Framework:
🔹 Không cần tự code xác thực & phân quyền từ đầu.
🔹 Hỗ trợ lưu trữ User & Role trong SQL Server.
🔹 Tích hợp bảo mật nâng cao như Hash Password, Token Authentication.

2. Cài đặt ASP.NET Core Identity

Bước 1: Cài đặt gói NuGet

Mở terminal hoặc NuGet Package Manager và chạy lệnh sau:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.UI
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

3. Cấu hình Identity Framework

Bước 2: Thêm DbContext và cấu hình Database

📌 Mở ApplicationDbContext.cs và kế thừa từ IdentityDbContext

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

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

📌 Mở appsettings.json và thêm cấu hình Connection String

"ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=IdentityDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}

4. Đăng ký Identity trong Program.cs

📌 Thêm Identity vào Program.cs

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

var builder = WebApplication.CreateBuilder(args);

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

builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseAuthentication(); // Kích hoạt Authentication
app.UseAuthorization();  // Kích hoạt Authorization

app.MapControllers();
app.Run();

📌 Giải thích:
✅ AddIdentity<IdentityUser, IdentityRole>(): Kích hoạt User & Role.
✅ AddEntityFrameworkStores<ApplicationDbContext>(): Lưu User vào database.
✅ AddDefaultTokenProviders(): Hỗ trợ reset password, email confirm.

5. Chạy Migration để tạo Database

📌 Chạy lệnh sau để tạo bảng User & Role trong SQL Server

dotnet ef migrations add CreateIdentitySchema
dotnet ef database update

📌 Kết quả:
✅ Các bảng như AspNetUsers, AspNetRoles, AspNetUserRoles sẽ được tạo trong database.

6. Tạo API Đăng Ký & Đăng Nhập Người Dùng

📌 Tạo AuthController.cs để xử lý đăng ký & đăng nhập

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

[Route("api/auth")]
[ApiController]
public class AuthController : ControllerBase
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;

    public AuthController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    [HttpPost("register")]
    public async Task<IActionResult> Register([FromBody] RegisterModel model)
    {
        var user = new IdentityUser { UserName = model.Email, Email = model.Email };
        var result = await _userManager.CreateAsync(user, model.Password);

        if (result.Succeeded)
        {
            return Ok(new { message = "Đăng ký thành công!" });
        }
        return BadRequest(result.Errors);
    }

    [HttpPost("login")]
    public async Task<IActionResult> Login([FromBody] LoginModel model)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
        if (result.Succeeded)
        {
            return Ok(new { message = "Đăng nhập thành công!" });
        }
        return Unauthorized();
    }
}

public class RegisterModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public class LoginModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

📌 Giải thích:
✅ API /api/auth/register để tạo tài khoản.
✅ API /api/auth/login để đăng nhập.

7. Tạo API Thêm Role và Phân quyền User

📌 Tạo RoleController.cs để quản lý Role

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

[Route("api/role")]
[ApiController]
public class RoleController : ControllerBase
{
    private readonly RoleManager<IdentityRole> _roleManager;
    private readonly UserManager<IdentityUser> _userManager;

    public RoleController(RoleManager<IdentityRole> roleManager, UserManager<IdentityUser> userManager)
    {
        _roleManager = roleManager;
        _userManager = userManager;
    }

    [HttpPost("create")]
    public async Task<IActionResult> CreateRole([FromBody] string roleName)
    {
        var roleExist = await _roleManager.RoleExistsAsync(roleName);
        if (!roleExist)
        {
            var result = await _roleManager.CreateAsync(new IdentityRole(roleName));
            if (result.Succeeded)
                return Ok(new { message = $"Role {roleName} đã được tạo thành công!" });
        }
        return BadRequest(new { message = "Role đã tồn tại!" });
    }

    [HttpPost("assign")]
    public async Task<IActionResult> AssignRole([FromBody] UserRoleModel model)
    {
        var user = await _userManager.FindByEmailAsync(model.Email);
        if (user == null) return NotFound(new { message = "User không tồn tại!" });

        var result = await _userManager.AddToRoleAsync(user, model.Role);
        if (result.Succeeded)
            return Ok(new { message = $"User {model.Email} đã được gán quyền {model.Role}!" });

        return BadRequest(result.Errors);
    }
}

public class UserRoleModel
{
    public string Email { get; set; }
    public string Role { get; set; }
}

📌 Giải thích:
✅ /api/role/create để tạo role mới.
✅ /api/role/assign để gán quyền cho user.

8. Kiểm thử API Identity

Đăng ký tài khoản

🔹 Gửi POST request đến /api/auth/register

{
    "email": "admin@example.com",
    "password": "Admin@123"
}

Thêm Role

🔹 Gửi POST request đến /api/role/create với body:

"Admin"

Gán quyền cho User

🔹 Gửi POST request đến /api/role/assign

{
    "email": "admin@example.com",
    "role": "Admin"
}

9. Tổng Kết

✅ ASP.NET Core Identity giúp quản lý User & Role dễ dàng.
✅ Sử dụng API để đăng ký, đăng nhập và phân quyền user.
✅ Có thể mở rộng để xác thực với JWT Token, OAuth, Google, Facebook.

📌 Bài tiếp theo:
👉 Tích hợp Identity với JWT Authentication trong C# – Phần 23 🚀

Bài viết liên quan