Trang Designer – Thiết kế website – Mua bán theme giá rẻ, plugin giá rẻ – Dịch vụ thiết kế website giá rẻ chuyên nghiệp chuẩn SEO – Mua bán theme giá rẻ, plugin giá rẻ chính hãng 100% từ nhà cung cấp, hỗ trợ update trọn đời

Microsoft AspNetCore Identity là một framework mạnh mẽ do Microsoft cung cấp để quản lý việc xác thực (authentication) và phân quyền (authorization) cho ứng dụng ASP.NET Core. Nó cung cấp các tính năng sẵn có như quản lý người dùng, vai trò, mật khẩu, email, xác thực đa yếu tố, xác thực bằng token, cũng như khả năng lưu trữ dữ liệu thành viên thông qua Entity Framework Core. Điều này giúp bạn dễ dàng xây dựng hệ thống quản lý tài khoản người dùng cho các ứng dụng Web API hoặc các ứng dụng web khác.
Tìm hiểu về Microsoft AspNetCore Identity và cách sử dụng trong ASP.NET Core Web API
Tìm hiểu về Microsoft AspNetCore Identity và cách sử dụng trong ASP.NET Core Web API

Tìm hiểu về Microsoft AspNetCore Identity

  • IdentityUser: Lớp mặc định đại diện cho một người dùng. Bạn có thể kế thừa và mở rộng lớp này (ví dụ: ApplicationUser) để thêm các thuộc tính riêng của ứng dụng.
  • IdentityRole: Đại diện cho vai trò (role) của người dùng (ví dụ: Admin, User,…).
  • UserManager<TUser>: Cung cấp các API để quản lý người dùng như tạo mới, thay đổi mật khẩu, thêm vai trò, ….
  • SignInManager<TUser>: Quản lý các thao tác đăng nhập, đăng xuất và xác thực người dùng.
  • RoleManager<TRole>: Cung cấp các API để quản lý các vai trò.

Microsoft.AspNetCore.Identity có thể được cấu hình với nhiều store khác nhau, nhưng phổ biến nhất là sử dụng cùng với Entity Framework Core để lưu trữ thông tin người dùng trong cơ sở dữ liệu.

Các khái niệm cơ bản

  • IdentityUser: Lớp mặc định đại diện cho một người dùng. Bạn có thể kế thừa và mở rộng lớp này (ví dụ: ApplicationUser) để thêm các thuộc tính riêng của ứng dụng.
  • IdentityRole: Đại diện cho vai trò (role) của người dùng (ví dụ: Admin, User,…).
  • UserManager<TUser>: Cung cấp các API để quản lý người dùng như tạo mới, thay đổi mật khẩu, thêm vai trò, ….
  • SignInManager<TUser>: Quản lý các thao tác đăng nhập, đăng xuất và xác thực người dùng.
  • RoleManager<TRole>: Cung cấp các API để quản lý các vai trò.

Microsoft.AspNetCore.Identity có thể được cấu hình với nhiều store khác nhau, nhưng phổ biến nhất là sử dụng cùng với Entity Framework Core để lưu trữ thông tin người dùng trong cơ sở dữ liệu.

Cách tích hợp Identity trong ASP.NET Core Web API

Cài đặt các package cần thiết

Bạn cần cài đặt các package sau:

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

Lưu ý: Nếu bạn dùng CSDL khác ngoài SQL Server, hãy thay thế package EF tương ứng.

Tạo DbContext và mở rộng IdentityUser (nếu cần)

Tạo lớp DbContext kế thừa từ IdentityDbContext<TUser>. Ví dụ:

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

public class ApplicationUser : IdentityUser
{
    // Bạn có thể thêm các thuộc tính bổ sung nếu cần, ví dụ:
    public string FullName { get; set; }
}

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

    // Nếu có các DbSet khác, khai báo thêm ở đây
}

Cấu hình Identity trong Program.cs

Trong file Program.cs (cho ASP.NET Core 6 trở lên), đăng ký DbContext và Identity vào Dependency Injection:

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

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

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

    // POST: api/auth/register
    [HttpPost("register")]
    public async Task<IActionResult> Register(RegisterRequest model)
    {
        var user = new ApplicationUser
        {
            UserName = model.Email,
            Email = model.Email,
            FullName = model.FullName
        };

        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            // Bạn có thể thêm user vào role nếu cần
            return Ok(new { Message = "Đăng ký thành công" });
        }

        return BadRequest(result.Errors);
    }

    // POST: api/auth/login
    [HttpPost("login")]
    public async Task<IActionResult> Login(LoginRequest model)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
        if (result.Succeeded)
        {
            // Tùy chọn: tạo JWT token hoặc trả về thông tin người dùng
            return Ok(new { Message = "Đăng nhập thành công" });
        }
        return Unauthorized(new { Message = "Đăng nhập thất bại" });
    }
}

public class RegisterRequest
{
    public string Email { get; set; }
    public string FullName { get; set; }
    public string Password { get; set; }
    public string ConfirmPassword { get; set; }
}

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

Trong file appsettings.json, thêm chuỗi kết nối:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyIdentityDb;Trusted_Connection=True;"
  }
}

Tạo Controller cho các thao tác xác thực

Ví dụ dưới đây là một controller API đơn giản cho các thao tác đăng ký (Register) và đăng nhập (Login) sử dụng Identity:

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

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

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

    // POST: api/auth/register
    [HttpPost("register")]
    public async Task<IActionResult> Register(RegisterRequest model)
    {
        var user = new ApplicationUser
        {
            UserName = model.Email,
            Email = model.Email,
            FullName = model.FullName
        };

        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            // Bạn có thể thêm user vào role nếu cần
            return Ok(new { Message = "Đăng ký thành công" });
        }

        return BadRequest(result.Errors);
    }

    // POST: api/auth/login
    [HttpPost("login")]
    public async Task<IActionResult> Login(LoginRequest model)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
        if (result.Succeeded)
        {
            // Tùy chọn: tạo JWT token hoặc trả về thông tin người dùng
            return Ok(new { Message = "Đăng nhập thành công" });
        }
        return Unauthorized(new { Message = "Đăng nhập thất bại" });
    }
}

public class RegisterRequest
{
    public string Email { get; set; }
    public string FullName { get; set; }
    public string Password { get; set; }
    public string ConfirmPassword { get; set; }
}

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

Chú ý: Trong thực tế, bạn nên kiểm tra xem PasswordConfirmPassword có khớp nhau và thêm các biện pháp xác thực bổ sung.

Một số lưu ý và mở rộng

  • Custom Identity: Bạn có thể tùy chỉnh Identity bằng cách mở rộng các lớp như IdentityUser, IdentityRole hoặc tạo các lớp custom store.
  • Token Providers: Identity hỗ trợ tạo các token dùng cho việc xác nhận email, đặt lại mật khẩu, … thông qua AddDefaultTokenProviders().
  • Middleware: Đối với Web API, thường bạn sẽ kết hợp Identity với các hình thức xác thực token (như JWT) để chuyển đổi sang mô hình stateless.
  • Quyền hạn và Role: Bạn có thể quản lý vai trò của người dùng thông qua RoleManager<IdentityRole> và áp dụng các chính sách phân quyền bằng [Authorize(Roles="RoleName")].

Kết luận

Microsoft.AspNetCore.Identity là một giải pháp toàn diện cho việc quản lý người dùng, mật khẩu, vai trò và các tính năng bảo mật khác trong ứng dụng ASP.NET Core. Bằng cách tích hợp Identity vào Web API, bạn có thể xây dựng hệ thống xác thực và phân quyền mạnh mẽ, dễ bảo trì và mở rộng. Qua ví dụ trên, bạn đã thấy cách cấu hình Identity, đăng ký dịch vụ trong DI, cũng như tạo các API để đăng ký và đăng nhập người dùng.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

pzf-icon