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

Cookie Authentication là một cơ chế xác thực dựa trên cookie, trong đó sau khi người dùng đăng nhập thành công, server sẽ tạo ra một cookie chứa thông tin (thường là các claim) của người dùng và gửi về cho client. Client sẽ lưu cookie này và gửi kèm theo các request tiếp theo. Server sẽ kiểm tra cookie để xác thực và phân quyền người dùng.
Tìm hiểu về Cookie Authentication và cách sử dụng trong ASP.NET Core Web API
Tìm hiểu về Cookie Authentication và cách sử dụng trong ASP.NET Core Web API

Tìm hiểu về Cookie Authentication

Cookie Authentication là một cơ chế xác thực dựa trên cookie, trong đó sau khi người dùng đăng nhập thành công, server sẽ tạo ra một cookie chứa thông tin (thường là các claim) của người dùng và gửi về cho client. Client sẽ lưu cookie này và gửi kèm theo các request tiếp theo. Server sẽ kiểm tra cookie để xác thực và phân quyền người dùng.

Mặc dù Cookie Authentication thường được sử dụng cho các ứng dụng web (MVC, Razor Pages) vì nó dựa trên session, nhưng bạn cũng có thể áp dụng trong ASP.NET Core Web API, đặc biệt là khi API được sử dụng trực tiếp từ trình duyệt hoặc khi bạn cần sử dụng phiên làm việc (session) dựa trên cookie.

Cấu hình Cookie Authentication trong ASP.NET Core

Cài đặt package (nếu cần)

Trong ASP.NET Core, package Microsoft.AspNetCore.Authentication.Cookies đã có sẵn. Nếu cần, bạn có thể đảm bảo rằng package này đã được cài đặt:

dotnet add package Microsoft.AspNetCore.Authentication.Cookies

Cấu hình trong Program.cs

Với ASP.NET Core 6 trở lên, bạn có thể cấu hình Authentication trong Program.cs như sau:

using Microsoft.AspNetCore.Authentication.Cookies;

var builder = WebApplication.CreateBuilder(args);

// Cấu hình Authentication sử dụng Cookie
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // Đường dẫn chuyển hướng khi chưa đăng nhập
        options.LoginPath = "/api/account/login";
        // Đường dẫn đăng xuất (nếu cần)
        options.LogoutPath = "/api/account/logout";
        // Tên cookie (có thể tùy chỉnh)
        options.Cookie.Name = "MyCookieAuth";
        // Thời gian tồn tại của cookie
        options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
        // Cấu hình tùy chọn khác (như SlidingExpiration, etc.)
        options.SlidingExpiration = true;
    });

builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();

// Đăng ký Authentication & Authorization middleware
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

Tạo Controller cho Authentication

Dưới đây là ví dụ về một controller xử lý login và logout sử dụng Cookie Authentication:

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

[Route("api/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
    // POST: api/account/login
    [HttpPost("login")]
    public async Task<IActionResult> Login([FromBody] LoginRequest request)
    {
        // Giả định xác thực thành công (trong thực tế, kiểm tra thông tin người dùng từ DB)
        if (request.Username == "admin" && request.Password == "password")
        {
            // Tạo danh sách các claim cho người dùng
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, request.Username),
                // Thêm các claim khác nếu cần (ví dụ role, email, …)
                new Claim(ClaimTypes.Role, "Admin")
            };

            var claimsIdentity = new ClaimsIdentity(
                claims, CookieAuthenticationDefaults.AuthenticationScheme);

            var authProperties = new AuthenticationProperties
            {
                // Nếu true, cookie sẽ được lưu lại giữa các phiên (persistent)
                IsPersistent = request.RememberMe,
                ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60)
            };

            // Tạo cookie bằng cách sign in
            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                new ClaimsPrincipal(claimsIdentity),
                authProperties);

            return Ok(new { Message = "Đăng nhập thành công" });
        }
        return Unauthorized(new { Message = "Thông tin đăng nhập không hợp lệ" });
    }

    // POST: api/account/logout
    [HttpPost("logout")]
    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
        return Ok(new { Message = "Đăng xuất thành công" });
    }
}

public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
    public bool RememberMe { get; set; }
}

Bảo vệ các API bằng cách sử dụng [Authorize]

Sau khi cấu hình xong Cookie Authentication, bạn có thể bảo vệ các endpoint trong API bằng cách sử dụng attribute [Authorize]. Ví dụ:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
[Authorize] // Yêu cầu phải có cookie xác thực hợp lệ để truy cập
public class ProductsController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProducts()
    {
        // Endpoint này chỉ được truy cập khi người dùng đã đăng nhập thành công
        return Ok(new[] { "Product1", "Product2", "Product3" });
    }
}

Lưu ý khi sử dụng Cookie Authentication trong Web API

  • Tính trạng thái (Stateful): Cookie Authentication thường tạo trạng thái phiên (session) phía server hoặc dựa vào cookie mã hóa thông tin. Trong khi các API RESTful thường hướng tới tính stateless, nên cần cân nhắc nếu sử dụng cho API.
  • Bảo mật: Đảm bảo sử dụng HTTPS để tránh việc cookie bị đánh cắp thông qua các kênh không mã hóa.
  • Phạm vi sử dụng: Cookie Authentication thích hợp cho các ứng dụng web mà client là trình duyệt. Nếu API được sử dụng chủ yếu bởi các client di động hoặc máy khách không phải trình duyệt, có thể cân nhắc sử dụng token-based authentication (như JWT).

Kết luận

Cookie Authentication cung cấp một cơ chế đơn giản để xác thực và duy trì phiên làm việc cho người dùng, thông qua việc phát hành cookie chứa thông tin xác thực. Trong ASP.NET Core Web API, bạn có thể cấu hình middleware Cookie Authentication, xây dựng các endpoint đăng nhập/đăng xuất, và bảo vệ các API bằng [Authorize]. Tuy nhiên, hãy lưu ý rằng do tính chất stateless của REST API, việc sử dụng Cookie Authentication cần cân nhắc kỹ lưỡng về thiết kế và mục đích sử dụng.

Nếu có thắc mắc hoặc cần hỗ trợ thêm, hãy đặt câu hỏi để được trợ giúp!

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