JWT là gì? khái niệm về json web token
JWT là gì? khái niệm về json web token? Khi nào thì nên sử dụng đến JWT? Hãy cùng xem qua bài viết sau đây để hiểu về chúng nhé.
1. JWT là gì?
[caption id="attachment_4252" align="aligncenter" width="600"]![JWT là gì? JWT là gì?](https://thuannhat.com.vn/wp-content/uploads/2022/02/JWT.jpg)
JWT được viết tắt từ JSON Web Token, đây là một phương tiện đại diện cho các bên yêu cầu chuyển giao giữa server và client. JWT cũng được xem như một tiêu chuẩn mở (RFC 7519) nhằm xác minh thông tin an toàn giữa các bên Client-Server dưới dạng JSON object.
Các chuỗi thông tin dạng JSON sẽ tiến hành mã hoá để trở thành một chuỗi ký tự lộn xộn, không có trật tự nhất định và rất khó hiểu khi nhìn vào. Thông tin này có thể được xác minh và tin cậy vì nó được ký điện tử - digitally signed. JWT có thể được ký bằng cách sử dụng một secret (với thuật toán HMAC) hoặc cặp public/private key dùng chuẩn RSA hoặc ECDSA.
Nói một cách khác, JWT là sự kết hợp (bởi dấu .) một Object Header dưới định dạng JSON được encode base64, một payload object dưới định dạng JSOn được encode base64 và một Signature cho URI cũng được mã hóa base64 nốt.
2. Khi nào thì nên sử dụng JWT
Dưới đây là các lợi ích của việc sử dụng JWT:
Ủy quyền - Authorization: Đây là trường hợp nên sử dụng JWT. Khi người dùng đã đăng nhập, mỗi request tiếp theo được gởi từ Client sẽ bao gồm JWT, cho phép người dùng access vào routes, services, and resources được phép với token đó. Single Sign ON là tính năng sử dung JWT rộng rãi hiện nay, vì chi phí thấp và dễ dàng sử dụng trên các domains khác nhau.
Trao đổi thông tin - Information Exchange: JSON Web Tokens là một cách tốt để truyền thông tin an toàn giữa các bên Client và Server. Vì JWT có thể signed. Ví dụ, sử dụng các cặp public/private key, bạn có thể biết chắc người gửi. Ngoài ra, vì signature được xác định dựa vào header và payload, bạn cũng có thể xác minh rằng nội dung chưa bị giả mạo.
3. Cấu trúc của JWT ( JSON Web Token)
JSON Web Tokens bao gồm 3 phần được phân tách bằng dấu chấm (.):
Header Payload Signature
Do đó, JWT thường trông như sau:
xxxxx.yyyyy.zzzzz
Sau đây ta sẽ đi tìm hiểu sâu hơn về từng phần
Header
Header bao gồm hai phần chính: loại token (mặc định là JWT - Thông tin này cho biết đây là một Token JWT) và thuật toán đã dùng để mã hóa (HMAC SHA256 - HS256 hoặc RSA).
- “typ” (type) chỉ ra rằng đối tượng là một JWT
- “alg” (algorithm) xác định thuật toán mã hóa cho chuỗi là HS256
Payload
Payload chứa các claims. Các claims là các biểu thức về một thực thể và một số metadata phụ trợ. . Claims thường chứa các thuộc tính như :typically, thông tin user và các dữ liệu bổ sung. Có 3 loại claims: registered, public, và private claims.
Registered claims: là một số metadata được định nghĩa trước, trong đó một số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub (subject), aud (audience), jti (Unique Identifier cho JWT, Can be used to prevent the JWT from being replayed. This is helpful for a one time use token.) ... Ví dụ:
![Cấu trúc của JWT ( JSON Web Token) Cấu trúc của JWT ( JSON Web Token)](https://thuannhat.com.vn/wp-content/uploads/2022/02/JWT-2.jpg)
Public claims: Claims được cộng đồng công nhận và sử dụng rộng rãi. Chúng có thể xác định theo ý muốn của người sử dụng JWT. Nhưng để tránh xung đột, chúng phải được xác định trong IANA JSON Web Token Registry hoặc được định nghĩa là URI chứa namespace chống xung đột.
Private claims: Đây là các claims tùy chỉnh được tạo ra để chia sẻ thông tin giữa 2 parties đã thỏa thuận và thống nhất trước đó.
Signature
Signature được sử dụng để xác minh tin nhắn không bị thay đổi trên đường truyền và trong trường hợp token được ký bằng private key, nó cũng có thể xác minh người gửi JWT.
Để tạo signature bạn phải lấy header được mã hóa, payload được mã hóa, một secret, thuật toán được chỉ định trong header và sign. Ví dụ bạn dùng thuật toán HMAC SHA256, signature sẽ được tạo như sau:
![Cấu trúc của JWT ( JSON Web Token) Cấu trúc của JWT ( JSON Web Token)](https://thuannhat.com.vn/wp-content/uploads/2022/02/JWT-3.jpg)
Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải.
4. Cách thức hoạt động của JWT
Trong xác thực, khi người dùng đăng nhập thành công thông tin đăng nhập của thọ thì JSON Web Token sẽ được trả về. Token là những thông tin xác thực nên cần phải cẩn thận để ngăn chặn các vấn đề bảo mật, không nên giữ token lâu hơn các yêu cầu.
Không nên lưu trữ dữ liệu nhạy cảm trên session trong bộ nhớ trình duyệt do thiếu bảo mật. Bất cứ khi nào người dùng muốn truy cập route hoặc resource được bảo vệ, tác nhân người dùng nên gửi JWT, thêm Authorization trong header với nội dung là Bearer + token. Nội dung của header sẽ trông như sau:
Máy chủ server sẽ kiểm tra tính hợp lệ của JWT trong header mỗi khi nhận request, nếu hợp lệ người dùng sẽ được phép truy cập các resource được bảo vệ. Nếu JWT chứa dữ liệu cần thiết, nhu cầu truy vấn cơ sở dữ liệu cho các hoạt động nhất định có thể bị giảm, mặc dù điều này có thể không phải luôn luôn như vậy.
Nếu token được gửi trong Authorization header, Chia sẻ tài nguyên nguồn gốc chéo ( Cross-Origin Resource Sharing - CORS) sẽ không thành vấn đề vì nó không sử dụng cookie.
Sơ đồ sau đây cho thấy cách JWT được lấy và sử dụng để truy cập API hoặc resource:
![Cách thức hoạt động của JWT Cách thức hoạt động của JWT](https://thuannhat.com.vn/wp-content/uploads/2022/02/jwt-4.jpg)
- Application hoặc client requests authorization đến authorization server. Điều này được thực hiện thông qua một trong các luồng authorization khác nhau. Ví dụ: một ứng dụng web tuân thủ OpenID Connect điển hình sẽ đi qua / oauth / ủy quyền điểm cuối bằng cách sử dụng luồng mã authorization.
- Khi authorization được cấp, authorization server sẽ trả lại access token cho application.
- Application sẽ sử dụng access token để truy cập vào resource (như API).
5. Ưu điểm của JWT
![Ưu điểm của JWT Ưu điểm của JWT](https://thuannhat.com.vn/wp-content/uploads/2022/02/JWT-4.jpg)
Nhỏ gọn: JWT luôn là một sự lựa chọn được ưu tiên hàng đầu khi thực hiện chuyển đổi trong môi trường HTTP và HTML, bởi các mã JWT nhỏ hơn rất nhiều so với mã thông báo SAML. Lý do là bởi vì so với XML thì JSON ngắn gọn hơn rất nhiều.
Phổ biến: Bộ phân tích cú pháp JSON được sử dụng phổ biến trong hầu hết tất cả các ngôn ngữ lập trình bởi chúng có thể tạo ra bản đồ trực tiếp hướng đến các đối tượng và giúp quá trình làm việc được diễn ra dễ dàng hơn.
Dễ xử lý: Được sử dụng phổ biến trên nhiều nền tảng internet, JWT sẽ được xử lý một cách dễ dàng trên mọi thiết bị của người dùng miễn là các thiết bị đó được kết nối với mạng internet nhất là các thiết bị di động.
An toàn: JWT có thể thực hiện ký một cách bí mật bằng cách sử dụng cặp khóa public/private dưới dạng chứng chỉ X.509 và thuật toán HMAC. Tương tự JWT, mã SAML cũng sử dụng cặp khóa này nhưng nó có thể khiến thông tin bị đánh cắp do việc ký XML sẽ tạo ra các lỗ hổng bảo mật.
>>> Xem thêm: Use case là gì? tìm hiểu về use case
Nhận xét
Đăng nhận xét