Bảo mật API với JWT Authentication trong C# – Phần 19

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Bảo mật API với JWT Authentication trong C# – Phần 19

 

Bảo mật API với JWT Authentication trong C# – Phần 19

1. Giới thiệu về JWT Authentication

JWT (JSON Web Token) là một chuẩn mở giúp xác thực người dùng trong các ứng dụng web và API.

🔹 Lợi ích của JWT:
✅ Xác thực không trạng thái (Stateless).
✅ Bảo mật cao với mã hóa.
✅ Dễ dàng triển khai trên API RESTful.

2. Cài đặt ASP.NET Core JWT Authentication

👉 Cài đặt thư viện JWT:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

👉 Thêm cấu hình JWT trong appsettings.json

"Jwt": {
  "Key": "Your_Secret_Key_123456789", 
  "Issuer": "yourdomain.com",
  "Audience": "yourdomain.com"
}

📌 Key phải mạnh và bảo mật, không nên để công khai.

3. Cấu hình JWT trong Program.cs

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

var key = Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]);

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.RequireHttpsMetadata = false;
        options.SaveToken = true;
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"]
        };
    });

builder.Services.AddAuthorization();
builder.Services.AddControllers();

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

📌 Quan trọng:
✅ UseAuthentication() phải được gọi trước UseAuthorization().
✅ TokenValidationParameters giúp kiểm tra tính hợp lệ của JWT.

4. Tạo Token trong AuthController.cs

👉 Tạo controller AuthController.cs để đăng nhập và cấp JWT:

using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

[Route("api/auth")]
[ApiController]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _config;

    public AuthController(IConfiguration config)
    {
        _config = config;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] UserLogin user)
    {
        if (user.Username == "admin" && user.Password == "123456") // Kiểm tra user (có thể dùng DB)
        {
            var token = GenerateJwtToken(user.Username);
            return Ok(new { token });
        }
        return Unauthorized();
    }

    private string GenerateJwtToken(string username)
    {
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var claims = new[]
        {
            new Claim(ClaimTypes.Name, username),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };

        var token = new JwtSecurityToken(
            _config["Jwt:Issuer"],
            _config["Jwt:Audience"],
            claims,
            expires: DateTime.UtcNow.AddHours(1),
            signingCredentials: creds
        );

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

public class UserLogin
{
    public string Username { get; set; }
    public string Password { get; set; }
}

📌 Cách sử dụng:
✅ Gửi POST request đến api/auth/login với JSON:

{
    "username": "admin",
    "password": "123456"
}

✅ Nhận về JWT Token để sử dụng trong API.

5. Bảo vệ API bằng [Authorize]

👉 Thêm [Authorize] vào các API cần bảo vệ:

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

[Route("api/protected")]
[ApiController]
[Authorize]
public class ProtectedController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProtectedData()
    {
        return Ok(new { message = "Bạn đã truy cập thành công API bảo vệ!" });
    }
}

6. Kiểm thử API với JWT

🔹 Gửi request GET http://localhost:5000/api/protected mà không có token
🚫 Kết quả:

{
    "status": 401,
    "message": "Unauthorized"
}

🔹 Gửi request với JWT Token:
✅ Thêm Authorization Header:

Authorization: Bearer <your_jwt_token>

✅ Kết quả:

{
    "message": "Bạn đã truy cập thành công API bảo vệ!"
}

7. Tổng Kết

✅ JWT Authentication giúp API bảo mật hơn.
✅ Xác thực người dùng bằng cách kiểm tra Username/Password.
✅ Tạo JWT Token và gửi về client.
✅ Bảo vệ API bằng [Authorize] trong controller.

📌 Các bước chính:

  1. Cài đặt gói JWT Authentication.
  2. Thêm cấu hình JWT trong appsettings.json.
  3. Cấu hình xác thực trong Program.cs.
  4. Tạo API đăng nhập để cấp Token.
  5. Bảo vệ API bằng [Authorize].
  6. Gửi request có kèm JWT Token để truy cập API.

💡 Bài tiếp theo:
👉 Bảo mật API với Refresh Token trong C# – Phần 20 🚀

Bài viết liên quan