×

Sử dụng Identity để quản lý xác thực và quyền truy cập trong C#

Quản lý xác thực và quyền truy cập trong các ứng dụng C# là một thách thức quan trọng đối với các nhà phát triển. Việc này bao gồm việc đảm bảo rằng người dùng đúng đắn có thể truy cập vào các tài nguyên và dữ liệu họ được phép, trong khi ngăn chặn người dùng không được phép. Một giải pháp phổ biến để quản lý xác thực và quyền truy cập trong C# là sử dụng Identity Framework.

Identity Framework trong môi trường .NET giúp đơn giản hóa quá trình này bằng cách cung cấp các công cụ và thư viện cần thiết để quản lý người dùng, vai trò, và xác thực. Bài viết này sẽ giới thiệu về Identity Framework, cách cài đặt và cấu hình, cũng như một số ví dụ điển hình.

1. Giới Thiệu Về Identity Framework

Identity Framework là một thư viện mạnh mẽ và linh hoạt từ Microsoft, giúp quản lý người dùng, mật khẩu, vai trò và các xác thực khác trong ứng dụng .NET. Nó tích hợp sẵn trong ASP.NET Core và có thể mở rộng để phù hợp với nhiều yêu cầu khác nhau của ứng dụng.

2. Cài Đặt Identity Framework

Để sử dụng Identity Framework trong dự án ASP.NET Core, trước hết cần cài đặt các gói nuget cần thiết:

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

Sau khi cài đặt các gói, chú ý đến việc cấu hình các dịch vụ trong Startup.cs.

3. Cấu Hình Identity Framework

Trong file Startup.cs, cần thêm các cấu hình cần thiết cho Identity. Đầu tiên, chúng ta cần đăng ký dịch vụ DbContext và Identity:

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

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddControllersWithViews();
}

4. Tạo Lớp Người Dùng Mặc Định

Mở rộng lớp IdentityUser để tạo lớp người dùng tùy chỉnh nếu cần:

public class ApplicationUser : IdentityUser
{
    // Thêm các thuộc tính tùy chỉnh nếu cần
}

5. Tạo Cơ Sở Dữ Liệu

Sử dụng Entity Framework để tạo các bảng cần thiết cho Identity thông qua migrations:

dotnet ef migrations add InitialIdentitySchema
dotnet ef database update

6. Quản Lý Người Dùng và Xác Thực

Trong Controller, sử dụng UserManagerSignInManager để quản lý người dùng:

public class AccountController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;

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

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await _userManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            AddErrors(result);
        }
        return View(model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
            if (result.Succeeded)
            {
                return RedirectToAction("Index", "Home");
            }
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
        }
        return View(model);
    }

    private void AddErrors(IdentityResult result)
    {
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }
}

7. Phân Quyền Người Dùng

Sử dụng lớp RoleManager để quản lý các vai trò:

public async Task<IActionResult> CreateRole(string roleName)
{
    var roleExists = await _roleManager.RoleExistsAsync(roleName);
    if (!roleExists)
    {
        var role = new IdentityRole(roleName);
        await _roleManager.CreateAsync(role);
    }
    return RedirectToAction("Index");
}

8. Kết Luận

Sử dụng Identity Framework để quản lý xác thực và quyền truy cập trong ứng dụng C# không chỉ giúp đơn giản hóa quá trình phát triển mà còn đảm bảo bảo mật cao. Bằng cách cài đặt, cấu hình, và triển khai theo các bước trên, bạn có thể dễ dàng tạo ra một hệ thống quản lý người dùng mạnh mẽ và linh hoạt.

Comments