Kích thước tối đa của mã thông báo JWT là bao nhiêu?


111

Tôi cần biết độ dài tối đa của

Mã thông báo web JSON (JWT)

Trong thông số kỹ thuật không có thông tin về nó. Có thể được rằng, không có giới hạn về độ dài?

Câu trả lời:


70

Như bạn đã nói, không có độ dài tối đa được xác định trong RFC7519 ( https://tools.ietf.org/html/rfc7519 ) hoặc các RFC khác liên quan đến JWS hoặc JWE.

Nếu bạn sử dụng định dạng JSON Serialized hoặc JSON Flat Serialized, không có giới hạn và không có lý do gì để xác định giới hạn.

Nhưng nếu bạn sử dụng định dạng JSON Compact Serialized (định dạng phổ biến nhất), bạn phải lưu ý rằng nó phải càng ngắn càng tốt vì nó chủ yếu được sử dụng trong ngữ cảnh web. JWT 4kb là thứ mà bạn nên tránh.

Hãy cẩn thận để chỉ lưu trữ các tuyên bố hữu ích và thông tin tiêu đề.


86

Tôi cũng đang cố gắng tìm ra điều này.

Tôi muốn nói - hãy thử và đảm bảo rằng nó dưới 7kb .

Trong khi JWT không xác định giới hạn trên trong thông số kỹ thuật ( http://www.rfc-editor.org/rfc/rfc7519.txt ), chúng tôi có một số giới hạn hoạt động. Vì JWT được bao gồm trong tiêu đề HTTP, chúng tôi có giới hạn trên ( SO: Tối đa trên giá trị tiêu đề http ) là 8K trên phần lớn các máy chủ hiện tại.

Vì điều này bao gồm tất cả các tiêu đề Yêu cầu <8kb, với 7kb mang lại một khoảng trống hợp lý cho các tiêu đề khác. Rủi ro lớn nhất đối với giới hạn đó sẽ là cookie (được gửi trong tiêu đề và có thể trở nên lớn).

Vì nó được mã hóa và base64 nên có ít nhất 33% hao phí chuỗi json ban đầu, vì vậy hãy kiểm tra độ dài của mã thông báo được mã hóa cuối cùng.

Một điểm cuối cùng - proxy và các thiết bị mạng khác có thể áp dụng một giới hạn khả dụng trong quá trình ...


2
Có lý do thực tế nào để tránh các mã thông báo "lớn" trong phạm vi 2-3kb không?
Samuel Elrod

1
@SamuelElrod nó có thể phụ thuộc vào yêu cầu của ứng dụng của bạn. 2-3kb cho mỗi yêu cầu liên quan đến JWT bổ sung thêm một lượng hành lý kha khá để mang qua dây mỗi lần. Nếu điều đó ảnh hưởng đến hiệu suất cảm nhận của người dùng, thì bạn sẽ hạn chế điều đó.
Jack

1
Cố gắng tránh làm đầy hơi. Tôi muốn nói rằng 2-3k đã quá lớn, bạn có gì trong đó? Mã thông báo hiện tại của tôi là 320 byte.
user2800708

4
Tôi đang xem xét đặt một bản đồ đặc quyền của tôi. nó sẽ chứa thông tin JWT chung của người dùng hiện tại, cũng như một bản đồ chứa user_id và loại đặc quyền cho tất cả người dùng mà họ có đặc quyền. Điều này về mặt lý thuyết có thể phát triển mà không bị ràng buộc.
Nate tháng

1
Thật thú vị, tôi cũng đang xem xét việc xây dựng một bản đồ các đặc quyền ngay bây giờ. Ngay bây giờ kế hoạch của tôi là sử dụng cách tiếp cận ngây thơ và xúc chúng dưới dạng mảng JSON, và nếu có vấn đề, tôi sẽ cố gắng đóng gói nội dung ở định dạng giống như nhị phân trong tương lai.
Ciantic

5

Khi sử dụng heroku , tiêu đề sẽ bị giới hạn ở 8k. Tùy thuộc vào lượng dữ liệu bạn đang sử dụng trên jwt2, nó sẽ được tiếp cận. Yêu cầu, khi quá kích thước, sẽ không chạm vào phiên bản nút của bạn, bộ định tuyến heroku sẽ thả nó trước lớp API của bạn ..

Khi xử lý một yêu cầu đến, một bộ định tuyến thiết lập một bộ đệm nhận 8KB và bắt đầu đọc dòng yêu cầu HTTP và các tiêu đề yêu cầu. Mỗi đoạn trong số này có thể dài tối đa 8KB, nhưng tổng cộng có thể lớn hơn 8KB. Các yêu cầu chứa dòng yêu cầu hoặc dòng tiêu đề dài hơn 8KB sẽ bị bộ định tuyến loại bỏ mà không gửi đi.

Xem: Giới hạn của Heroku

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.