Mã thông báo Web JSON - tại sao tải trọng công khai?


30

Tôi không thể hiểu lý do khiến cho các yêu cầu / tải trọng của JWT hiển thị công khai sau khi giải mã Base64.

Tại sao?

Có vẻ như nó sẽ hữu ích hơn nhiều khi được mã hóa bí mật.

Ai đó có thể giải thích tại sao, hoặc trong tình huống nào, giữ dữ liệu này công khai là hữu ích?


Khi bạn viết JWT, bạn có thể có nghĩa là JWS. Bởi vì JWE (cũng là "lớp con" của JWT) thực sự mã hóa nội dung của nó.
Alexey

Câu trả lời:


28

Bạn chọn không mã hóa tải trọng vì những lý do tương tự mà bạn chọn không mã hóa bất cứ thứ gì khác: chi phí (dù nhỏ) vượt quá lợi ích và rất nhiều dữ liệu đơn giản là không cần phải được bảo mật theo cách đó.

Điều bạn chủ yếu cần bảo vệ chống lại mọi người là giả mạo dữ liệu để bản ghi sai được cập nhật hoặc tài khoản kiểm tra của ai đó nhận được tiền trong đó không cần phải có. Chữ ký của Mã thông báo Web JSON thực hiện điều đó, bởi vì việc thay đổi bất kỳ phần nào của tổ hợp tiêu đề / tải trọng / chữ ký làm mất hiệu lực gói.

Lưu ý rằng bạn vẫn có thể bảo mật các gói tại Lớp vận chuyển bằng cách sử dụng SSL.


À tôi hiểu rồi, nên về cơ bản JWT là một mã thông báo CSRF mới. Cảm ơn lời giải thích của bạn, nó đã xóa sự nhầm lẫn.
ineedhelp

6
Không JWT không phải là mã thông báo CSRF mới. Đó là 2 điều khác nhau.
Tro

@ash nếu các chi tiết của một hoạt động được lưu trữ trong JWT và được xác thực trên máy chủ, thì về cơ bản JWT có đóng vai trò ngăn chặn CSRF trong kịch bản đó không? Tôi hiểu mục đích chính của vanilla JWT là xác thực, điều này rất rõ ràng từ câu trả lời này. Tôi nghĩ rằng tôi đã tưởng tượng thêm nhiều dữ liệu và hoàn thành hai việc cùng một lúc.
trợ giúp vào

@RobertHarvey, bạn đang sử dụng JWT không chính xác. JST là một thuật ngữ "ô" cho JWS và JWE. JWS là để xác thực, JWE là để mã hóa. Vì vậy, "Mục đích của mã thông báo web JSON là để xác thực" nên thực sự là "JWS là để xác thực".
Alexey

@Alexey: Tôi đã thực hiện một thay đổi nhỏ trong câu trả lời của tôi cho chỗ ở.
Robert Harvey

4

Việc sử dụng chữ ký hạn trong RFC tương tự như chữ ký số trong mật mã bất đối xứng. Trong mật mã bất đối xứng nếu người gửi mã hóa tin nhắn bằng khóa riêng của họ, bất kỳ ai có tin nhắn đều có thể giải mã nó bằng khóa chung của người gửi. Vì vậy, mục tiêu với chữ ký hạn không phải là để giữ bí mật tin nhắn, mà là để xác minh tính toàn vẹn / người gửi thư, điều đó không bị thay đổi.

Trong trường hợp JWT, hệ thống gửi là cả người tạo và người tiêu dùng thư (xem sơ đồ bên dưới) và mục tiêu là đảm bảo mã thông báo được chuyển đến người dùng không bị giả mạo (ví dụ: được cấp đặc quyền nâng cao).

Và như @Robert đã đề cập, JWTs vẫn có thể / nên được mã hóa bằng TLS.

Dưới đây là một lời giải thích tốt về JWT và chữ ký mà từ đó hình ảnh dưới đây có nguồn gốc. 5 bước dễ dàng để hiểu mã thông báo web JSON (JWT)

asdfasdf


2

Để thêm vào câu trả lời của Robert Harveys, có một bất lợi đáng kể khi mã hóa tải trọng - điều đó có nghĩa là người nhận dịch vụ cần chia sẻ bí mật với máy chủ xác thực (khóa mã hóa) để hiểu liệu người mang mã thông báo có được ủy quyền hay không hay không. Ngược lại, bất kỳ ai cũng có thể xác thực JWT chỉ bằng khóa công khai được xuất bản bởi máy chủ xác thực.

Đây là một phần quan trọng của đặc tả kết nối openid vì nó cho phép các ứng dụng khách xác thực mã thông báo nhận dạng do máy chủ xác thực phát hành, nó cũng giúp triển khai các máy chủ tài nguyên dễ dàng hơn (vì chúng không cần được triển khai với quyền truy cập vào mã hóa bí mật khóa) và cũng giúp khi cố gắng chẩn đoán bất kỳ vấn đề nào với JWT đã ban hành.


Bạn đang cố gắng so sánh các cơ chế mã hóa bất đối xứng và đối xứng, jwt là một triển khai mã hóa RSA.
TheAnimatrix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.