Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Đây là bài viết được dịch bởi AI.

Seize the day

JWT (JSON Web Token) là gì?

  • Ngôn ngữ viết: Tiếng Hàn Quốc
  • Quốc gia cơ sở: Tất cả các quốc gia country-flag

Chọn ngôn ngữ

  • Tiếng Việt
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Văn bản được tóm tắt bởi AI durumis

  • JSON Web Token (JWT) là một token được mã hóa để truyền tải thông tin một cách an toàn.
  • JWT được cấu tạo bởi tiêu đề, tải trọng và chữ ký, chữ ký đảm bảo tính toàn vẹn của dữ liệu.
  • JWT không cần quản lý thông tin trạng thái riêng biệt, do đó có khả năng mở rộng cao trong môi trường phân tán.

JWT là gì?

JSON Web Token (JWT) là một loại phương thức để truyền tải thông tin một cách an toàn dưới dạng đối tượng JSON, đây là một tiêu chuẩn mở (RFC 7519). Nó đơn giản là đóng gói thông tin cần thiết vào token và mã hóa nó để sử dụng.


JWT được nhấn mạnh là một token đã được ký (signed token). Khi sử dụng cặp khóa công khai/khóa riêng tư để ký, chữ ký này đảm bảo rằng chỉ những bên sở hữu khóa riêng tư mới có thể ký token đó. Điều đó có nghĩa là, server sở hữu khóa có thể biết liệu token này có hợp lệ hay không.


Cấu trúc JWT

JWT bao gồm phần Header (tiêu đề), Payload (trọng tải) và Signature (chữ ký).

Mỗi phần được mã hóa Base64 và được phân cách bởi dấu chấm (.).

Header

{
    "alg": "HS256",
    "typ": "JWT"

Header chứa hai thông tin chính: loại token (typ) và thuật toán ký được sử dụng (alg). Thuật toán ký được sử dụng để tạo và xác minh chữ ký.

typ được đặt là "JWT" và alg là HMAC, SHA256, v.v. Ví dụ trên có nghĩa là thuật toán HS256 được sử dụng với khóa riêng tư.

Payload

{
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022


Payload chứa các Claim (yêu cầu) mà bạn muốn truyền tải trong token. Thông tin nhận dạng người dùng hoặc thuộc tính của token được lưu trữ dưới dạng key-value. Nói cách khác, bạn có thể thêm bất cứ thứ gì bạn muốn!

Theo tiêu chuẩn, tên khóa được xác định ngắn gọn bằng 3 chữ cái.

Các claim được đăng ký như sau:

  • iss (Issuer): Người phát hành token (chứa thông tin nhận dạng duy nhất của người phát hành token)
  • sub (Subject): Chủ thể mà token nhắm đến
  • aud (Audience): Người nhận token
  • exp (Expiration Time): Thời gian hết hạn của token (sau thời gian này, token không còn hợp lệ nữa)
  • nbf (Not Before): Ngày token có hiệu lực (token không thể được sử dụng trước thời gian này)
  • iat (Issued At): Thời gian phát hành token
  • jti (JWT Id): Mã định danh của token JWT (giá trị để phân biệt các issuer khác nhau khi có nhiều issuer)


Nếu có bất kỳ giá trị nào khác cần thiết, bạn có thể thêm vào và sử dụng.

Tuy nhiên, payload không phải là giá trị đã được mã hóa và ký, vì vậy nó không chứa thông tin nhạy cảm.

Bất kỳ ai cũng có thể xem nó khi giải mã.jwt.io Bạn có thể kiểm tra trực tiếp trên trang web.

Signature

HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    your-256-bit-secret

Header và Payload được kết nối bởi dấu chấm (.) sau khi mã hóa base64 và được ký bằng your-256-bit-secret, là khóa riêng tư mà server sở hữu.

Do đó, chỉ server đã phát hành token mới có thể giải mã chữ ký (Signature) bằng khóa riêng tư.

Để giải mã, bạn cần giải mã chữ ký (Signature) bằng khóa riêng tư, sau đó kiểm tra xem base64UrlEncode(header) có khớp với giá trị heaer của JWT hay không và base64UrlEncode(payload) có khớp với giá trị payload hay không.

Header và Payload (ngoại trừ chữ ký) chỉ được mã hóa, vì vậy bạn có thể xem thông tin trong nội dung, nhưng chữ ký đảm bảo tính toàn vẹn và bảo mật của thông tin.



JWT là Self-contained, có nghĩa là nó tự chứa tất cả thông tin cần thiết, và JWT được tạo ra để khắc phục nhược điểm của phiên (session) cần phải có trạng thái (stateful), vì vậy nó không yêu cầu kho lưu trữ riêng biệt.

Không cần phải duy trì phiên (session) ở phía server, vì vậy nó không có trạng thái (stateless), điều này tăng khả năng mở rộng trong các hệ thống phân tán hoặc kiến trúc microservice.

Nó được bảo vệ bằng chữ ký kỹ thuật số (Signature) và đảm bảo tính toàn vẹn của dữ liệu.

nofunfromdev
Seize the day
Seize the day
nofunfromdev
Mô hình hóa dữ liệu khái niệm Mô hình hóa dữ liệu khái niệm là quá trình tách biệt các thực thể và thể hiện mối quan hệ giữa các thực thể bằng ERD. Thực thể là đơn vị thông tin độc lập, thuộc tính là dữ liệu mà thực thể sở hữu. Định danh là để xác định duy nhất thực thể, quan hệ là để
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 tháng 4, 2024

[Concurrency] Atomic Operation: Memory Fence và Memory Ordering Bài đăng trên blog này giải thích cách xem xét thứ tự bộ nhớ trong các hoạt động nguyên tử và tầm quan trọng của tùy chọn Ordering. Bài viết sẽ cung cấp thông tin chi tiết về các tùy chọn Ordering khác nhau như Relaxed, Acquire, Release, AcqRel, SecCst, c
곽경직
곽경직
곽경직
곽경직
곽경직

12 tháng 4, 2024

Java Collections Framework (JCF) là gì? - Định nghĩa và đặc điểm của JCF (JAVA) Java Collections Framework (JCF) là một tập hợp các lớp trong Java cung cấp một phương pháp tiêu chuẩn hóa để xử lý hiệu quả một lượng lớn dữ liệu. JCF triển khai các cấu trúc lưu trữ dữ liệu và các thuật toán thành các lớp để tăng cường khả năng tái sử d
제이온
제이온
제이온
제이온

27 tháng 4, 2024

Học lập trình ở đâu? : Tổng hợp các dịch vụ khóa học lập trình web trực tuyến Giới thiệu các khóa học trực tuyến miễn phí / trả phí đa dạng dành cho người mới bắt đầu lập trình. Từ các bài giảng miễn phí như Sinh hoạt Lập trình, Khan Academy, EBS đến các dịch vụ trả phí như CodeStates, Inflearn, Fastcampus đều cho phép học tập một
길리
길리
길리
길리

29 tháng 3, 2024

Tài liệu tham khảo API của Hàn Quốc Investment & Securities Bài đăng trên blog này giải thích quá trình thu thập thông tin cần thiết để phát triển chương trình giao dịch tự động bằng cách sử dụng API của Hàn Quốc Investment & Securities. Bạn có thể thu thập thông tin cần thiết để phát triển chương trình giao dịch
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

22 tháng 4, 2024

equals() vs hashCode() Trong Java, `equals()` và `hashCode()` là những phương thức quan trọng được sử dụng để so sánh sự bằng nhau và bản sắc của đối tượng. `equals()` so sánh nội dung của các đối tượng có giống nhau hay không, trong khi `hashCode()` xác định xem các đối tượng
제이온
제이온
제이온
제이온

25 tháng 4, 2024