0
0
Lập trình
Admin Team
Admin Teamtechmely

Tìm Hiểu Về JSON Web Token (JWT): Xác Thực và Ủy Quyền Trong ASP.NET Blazor Và Web API

Đăng vào 3 tuần trước

• 5 phút đọc

Tìm Hiểu Về JSON Web Token (JWT): Xác Thực và Ủy Quyền Trong ASP.NET Blazor Và Web API

Trong thời đại công nghệ số, việc bảo mật thông tin và quản lý quyền truy cập của người dùng trở nên ngày càng quan trọng. JSON Web Token (JWT) là một giải pháp hiệu quả và phổ biến cho vấn đề này, được sử dụng rộng rãi để thực hiện xác thực và ủy quyền trong các ứng dụng web hiện đại. Trong bài viết này, chúng ta sẽ cùng nhau khám phá JWT là gì và cách triển khai JWT trong các ứng dụng ASP.NET BlazorWeb API để bảo vệ thông tin người dùng một cách an toàn và hiệu quả.

1. JSON Web Token (JWT) Là Gì?

JSON Web Token (JWT) là một tiêu chuẩn mở được quy định trong RFC 7519, cho phép truyền tải thông tin an toàn giữa các bên dưới dạng một đối tượng JSON. Thông tin được chứa trong JWT có thể được xác thực và tin cậy nhờ vào cơ chế ký số. JWT thường được áp dụng trong việc xác thực người dùng và ủy quyền truy cập trong các ứng dụng web, đặc biệt là trong kiến trúc microservices.

Cấu Trúc Của JWT

JWT bao gồm ba phần chính:

  1. Header: Thông tin về loại token và thuật toán mã hóa đang được sử dụng.
  2. Payload: Chứa các "tuyên bố" (claims) liên quan đến người dùng và quyền hạn của họ.
  3. Signature: Phần ký số của token, được tạo ra từ Header, Payload và một khóa bí mật.

JWT có thể được mã hóa hoặc không mã hóa, nhưng thường thì chúng chỉ được ký để đảm bảo tính toàn vẹn dữ liệu.

2. Sử Dụng JWT Để Xác Thực Và Ủy Quyền Trong ASP.NET Blazor Và Web API

Khi phát triển ứng dụng ASP.NET với Blazor và Web API, JWT là công cụ lý tưởng để xác thực người dùng và quản lý quyền truy cập tới các API bảo mật. Dưới đây là quy trình sử dụng JWT:

Bước 1: Đăng Nhập Và Tạo JWT

Khi người dùng tiến hành đăng nhập:

  • Thông tin đăng nhập (username và password) sẽ được xác thực thông qua Web API.
  • Nếu xác thực thành công, server sẽ tạo ra một JWT và trả về cho client.

Bước 2: Lưu Trữ JWT

JWT có thể được lưu trữ trên client, thường sử dụng localStorage hoặc sessionStorage, giúp client dễ dàng sử dụng token này trong các yêu cầu sau.

Bước 3: Xác Thực Với JWT

Mỗi khi client có nhu cầu truy cập vào các API bảo mật, JWT sẽ được gửi kèm theo trong header Authorization dưới dạng Bearer Token. Server sẽ kiểm tra tính hợp lệ của JWT để xác định danh tính người dùng và quyền truy cập.

Bước 4: Ủy Quyền Với JWT

Dựa trên thông tin có trong JWT, server sẽ quyết định cấp quyền hoặc từ chối truy cập vào các tài nguyên hoặc API nhất định.

3. Triển Khai JWT Trong ASP.NET Blazor và Web API

Để triển khai JWT, bạn có thể thực hiện theo các bước sau:

Cấu Hình JWT Authentication Trong Web API

Trong Startup.cs hoặc Program.cs:

csharp Copy
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "yourIssuer",
                ValidAudience = "yourAudience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
            };
        });

    services.AddAuthorization();
    services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Tạo JWT Trong Web API

Khi người dùng đăng nhập thành công:

csharp Copy
private string GenerateJwtToken(User user)
{
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    var claims = new[] 
    {
        new Claim(JwtRegisteredClaimNames.Sub, user.Username),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
    };

    var token = new JwtSecurityToken(
        issuer: "yourIssuer",
        audience: "yourAudience",
        claims: claims,
        expires: DateTime.Now.AddMinutes(30),
        signingCredentials: credentials);

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

Sử Dụng JWT Trong Blazor

Khi gọi API từ Blazor, bạn cần đính kèm JWT vào header của yêu cầu:

csharp Copy
private async Task<HttpResponseMessage> GetSecuredDataAsync()
{
    var token = await _localStorage.GetItemAsync<string>("authToken");
    var client = _httpClientFactory.CreateClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    return await client.GetAsync("https://api.yourwebsite.com/secured-endpoint");
}

Xác Thực Và Ủy Quyền Trong Web API

Bạn có thể sử dụng thuộc tính [Authorize] trong các controller của Web API để bảo vệ các endpoint yêu cầu xác thực:

csharp Copy
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class SecuredController : ControllerBase
{
    [HttpGet]
    public IActionResult GetSecuredData()
    {
        return Ok("Đây là dữ liệu bảo mật.");
    }
}

4. Kết Luận

JSON Web Token (JWT) là một phương pháp phổ biến và hiệu quả để xác thực và ủy quyền trong các ứng dụng web hiện đại. Khi kết hợp với ASP.NET Blazor và Web API, JWT không chỉ giúp bảo vệ thông tin người dùng mà còn dễ dàng quản lý quyền truy cập, từ đó mang lại sự an toàn cho ứng dụng của bạn. Hãy triển khai JWT ngay hôm nay để nâng cao bảo mật cho ứng dụng của bạn nhé.

Xem video hướng dẫn: Authentication and Authorization in Blazor and Web API using JWT

Theo dõi để cập nhật thêm nhiều kiến thức bổ ích khác trên kênh YouTube của tôi: Code Overdose.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào