- vừa được xem lúc

JSON Web Token (JWT) là gì? Xác thực và ủy quyền với JWT

0 0 1

Người đăng: Code Overdose

Theo Viblo Asia

Trong các ứng dụng web hiện đại, việc bảo mật và quản lý quyền truy cập là rất quan trọng. JSON Web Token (JWT) là một giải pháp phổ biến được sử dụng để xác thực và ủy quyền. Bài viết này sẽ giải thích JWT là gì và hướng dẫn cách triển khai JWT trong ASP.NET BlazorWeb API để bảo vệ ứng dụng của bạn.

JSON Web Token (JWT) là gì?

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

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

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

JWT có thể ở dạng mã hóa hoặc không mã hóa, tuy nhiên thông thường chúng không được mã hóa mà chỉ được ký để đảm bảo tính toàn vẹn.

Sử dụng JWT để xác thực và ủy quyền với ASP.NET Blazor và Web API

Khi xây dựng một ứng dụng ASP.NET với Blazor và Web API, JWT có thể được sử dụng để xác thực người dùng và ủy quyền truy cập vào các API bảo mật. Quy trình sử dụng JWT thường bao gồm các bước sau:

  1. Đăng nhập và tạo JWT:

    • Khi người dùng đăng nhập, ứng dụng sẽ xác thực thông tin đăng nhập (username và password) qua Web API.
    • Nếu thông tin đăng nhập hợp lệ, server sẽ tạo ra một JWT chứa thông tin người dùng và các quyền hạn của họ, sau đó trả JWT này về cho client (Blazor app).
  2. Lưu trữ JWT:

    • JWT có thể được lưu trữ trên client, thông thường là trong localStorage hoặc sessionStorage. Việc này cho phép client sử dụng JWT trong các yêu cầu tiếp theo đến server.
  3. Xác thực với JWT:

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

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

Triển khai JWT trong ASP.NET Blazor và Web API

Dưới đây là cách triển khai cơ bản JWT trong ASP.NET với Blazor và Web API:

  1. Cấu hình JWT Authentication trong Web API:

    Trong Startup.cs hoặc Program.cs:

    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(); });
    }
    
  2. Tạo JWT trong Web API:

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

    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);
    }
    
  3. 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:

    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");
    }
    
  4. Xác thực và ủy quyền trong Web API:

    Trong các controller của Web API, bạn có thể sử dụng [Authorize] để bảo vệ các endpoint yêu cầu xác thực:

    [Authorize]
    [ApiController]
    [Route("api/[controller]")]
    public class SecuredController : ControllerBase
    { [HttpGet] public IActionResult GetSecuredData() { return Ok("This is secured data."); }
    }
    

Kết luận

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 cho phép xây dựng các ứng dụng có khả năng bảo mật cao và dễ dàng quản lý quyền truy cập của người dùng.

Video triển khai : Authentication and Authorization in Blazor and Web API using JWT

Để biết thêm nhiều nội dung tương tự, hãy theo dõi kênh YouTube của mình nhé: Code Overdose

Bình luận

Bài viết tương tự

- vừa được xem lúc

How JSON Web Token(JWT) authentication works?

1. JWT (JSON Web Token) là gì . Thông tin này có thể xác minh và đáng tin cậy vì nó là chữ ký điện tử . Jwt có thể được đăng ký băng cách sử dụng bí mật (với thuật toán HMAC) hoặc cặp khóa public/private bằng RSA.

0 0 67

- vừa được xem lúc

JWT và ứng dụng xác thực người dùng trong Rails

JWT. Thời gian gần đây mình có init API thì mình có ứng dụng Json Web Token (JWT) để xây dựng xác thực người dùng. Nó có support những gì và ứng dụng của nó ra sao thì mình xin chia sẻ trong bài viết. Nó là gì.

0 0 170

- vừa được xem lúc

Tìm hiểu một chút về JWT

Hello mọi người, trong bài viết hôm nay mình cùng các bạn sẽ cùng tìm hiểu về JWT nhé. JWT ( Json Web Token ) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách truyền thông tin một cách an toàn giữa các b

0 0 69

- vừa được xem lúc

Refresh token là gì? Cách hoạt động có khác gì so với token không?

Ở những bài trước chúng ta đã nói nhiều về JWT là gì? Vì sao phải sử dụng JWT, trong suốt quá trình sử dụng JWT chúng tôi có nhận được nhiều phản hồi về chủ đề JWT. Trong đó có một vấn đề mà có nhiều

0 0 98

- vừa được xem lúc

JWT và ứng dụng của nó

Khái niệm. JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa bên bằng 1 đối tượng JSON.

0 0 42

- vừa được xem lúc

JWT - Từ cơ bản đến chi tiết

Chào mọi người. Bài viết của mình ngày hôm nay với mục đích chia sẻ những kiến thức mà mình lượm nhặt được, gom chúng lại để tổng hợp cho các bạn.

0 0 42