Tóm Tắt
1. JWT là gì?
JWT được viết tắt từ JSON Web Token, đây là một phương tiện đi lại đại diện thay mặt cho những bên nhu yế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 mục đích xác định thông tin bảo đảm an toàn giữa những bên Client-Server dưới dạng JSON object .
Các chuỗi thông tin dạng JSON sẽ triển khai 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 hoàn toàn có thể được xác định và đáng tin cậy vì nó được ký điện tử – digitally signed. JWT hoàn toàn 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.
Bạn đang đọc: JWT là gì? khái niệm về json web token » Thuận Nhật
2. Khi nào thì nên sử dụng JWT
Dưới đây là những quyền lợi 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 gồm có 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 và khám phá sâu hơn về từng phần
Header
Header gồm có hai phần chính : loại token ( mặc định là JWT – tin tức 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 những claims. Các claims là những biểu thức về một thực thể và 1 số ít metadata phụ trợ. . Claims thường chứa những thuộc tính như : typically, thông tin user và những tài liệu bổ trợ. 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ụ:
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.
Xem thêm: bat tiếng Anh là gì?
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 định tin nhắn không bị đổi khác trên đường truyền và trong trường hợp token được ký bằng private key, nó cũng hoàn toàn có thể xác định 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 :
Do bản thân Signature đã gồm có cả header và payload nên Signature hoàn toàn có thể dùng để kiểm tra tính toàn vẹn của tài liệu khi truyền tải .
4. Cách thức hoạt động của JWT
Trong xác nhận, khi người dùng đăng nhập thành công xuất sắc 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 nhận nên cần phải cẩn trọng để ngăn ngừa những yếu tố bảo mật thông tin, không nên giữ token lâu hơn những nhu yếu .
Không nên tàng trữ tài 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 vấn 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 vấn những resource được bảo vệ. Nếu JWT chứa tài liệu thiết yếu, nhu yếu truy vấn cơ sở tài liệu cho những hoạt động giải trí nhất định hoàn toàn có thể bị giảm, mặc dầu điều này hoàn toàn 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 yếu tố 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 vấn API hoặc resource :
- 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
Nhỏ gọn : JWT luôn là một sự lựa chọn được ưu tiên số 1 khi triển khai quy đổi trong môi trường tự nhiên HTTP và HTML, bởi những mã JWT nhỏ hơn rất nhiều so với mã thông tin SAML. Lý do là chính bới 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ễ giải quyết và xử lý : Được sử dụng phổ cập trên nhiều nền tảng internet, JWT sẽ được giải quyết và xử lý một cách thuận tiện trên mọi thiết bị của người dùng miễn là những thiết bị đó được liên kết với mạng internet nhất là những thiết bị di động .
An toàn : JWT hoàn toàn có thể thực thi ký một cách bí hiểm bằng cách sử dụng cặp khóa public / private dưới dạng chứng từ 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ó hoàn toàn có thể khiến thông tin bị đánh cắp do việc ký XML sẽ tạo ra những lỗ hổng bảo mật thông tin .
>> > Xem thêm : Use case là gì ? khám phá về use case
Source: https://final-blade.com
Category: Tiền Điện Tử – Tiền Ảo