2016-04-15 11 views
5

Tôi đang sử dụng công nghệ stack sauLoại dữ liệu MYSQL hoặc Maria DB tốt nhất để lưu trữ mã thông báo JWT là gì?

  • Laravel 5.2
  • MySQL

và cho an ninh Tôi đang sử dụng JWT (JSON Web Token)

tôi đã có thể để bảo đảm các ứng dụng của tôi bằng JWT.

Tôi muốn lưu trữ mã thông báo JWT trong cơ sở dữ liệu mysql.

CÂU HỎI Loại dữ liệu nào sau đây là tốt nhất để lưu trữ mã thông báo JWT trong MySQL DB?

  1. VARCHAR
  2. CLOB
  3. TEXT
  4. DÀI TEXT
+0

Không phải là điểm của JWT mà không cần lưu trữ trong cơ sở dữ liệu? – ceejayoz

+0

@ceejayoz Thẻ làm mới cũng có thể là JWTs và tôi tin rằng mã sẽ cần lưu trữ chúng trong kho dữ liệu. – georaldc

Trả lời

5

Như với bất cứ điều gì khác, câu trả lời là "nó phụ thuộc".

Trước tiên, bạn cần phải xác định xem lưu trữ JWT được mã hóa đầy đủ có phải là giải pháp đúng hay không. Tôi có xu hướng không lưu trữ chuỗi JWT và thay vào đó lưu trữ các xác nhận quyền sở hữu được sử dụng để xây dựng JWT, điều này sẽ tiết kiệm được một tấn phòng trong cơ sở dữ liệu.

Nếu bạn quyết định lưu trữ JWT là phương pháp chính xác, thì chúng tôi có thể xem xét các tùy chọn của bạn.

TEXT và LONGTEXT chỉ là các loại CLOB, vì vậy chúng tôi có thể bỏ qua điều đó.

TEXT và VARCHAR đều có giới hạn 64kb, vì vậy mọi thứ ở trên sẽ yêu cầu LONGTEXT (hoặc MEDIUMTEXT, mà bạn không đề cập đến nhưng là tùy chọn).

Sự khác biệt giữa TEXT và VARCHAR là VARCHAR được lưu trữ trong hàng nhưng TEXT về cơ bản là một con trỏ. VARCHAR sẽ nhanh hơn nếu bạn thường xuyên đọc JWT, nhưng các chuỗi lớn hơn sẽ khiến mỗi hàng riêng lẻ lớn hơn, sẽ là một hit hiệu suất.

Với lớn như JWTs có xu hướng, tôi sẽ nói rằng TEXT là một lựa chọn khá tốt để lưu trữ JWT trong cơ sở dữ liệu. Nếu bạn hoàn toàn tự tin rằng các JWT sẽ ở rất nhỏ, thì VARCHAR có thể tạo ra hiệu năng đọc tốt hơn, nhưng bạn sẽ tốt nhất nên kiểm tra với dữ liệu thực tế để chắc chắn.

Nếu bạn cần một trường lớn hơn TEXT có thể cung cấp, thì tôi sẽ nhắc lại đề xuất của tôi để tránh lưu trữ JWT được mã hóa, nhưng LONGTEXT là một tùy chọn ở đó.

+0

Tôi quyết định lấy lại lời khuyên của Michael: lưu trữ dữ liệu khiếu nại. Trường "jti" dường như được thực hiện cho việc này - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

Dựa trên ví dụ này, tôi sẽ đề nghị này cho một 'mã hóa' base64 mã thông báo:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

Nói chung, JSON nên có một số kích thước của TEXT hoặc VARCHAR với CHARACTER SET utf8 hoặc utf8mb4. (COLLATION có thể không liên quan.)

TEXT được giới hạn ở 64KB; không có nhiều lợi thế khi sử dụng VARCHAR nhỏ hơn.

Re: "TEXT chỉ là một con trỏ" - Không hoàn toàn chính xác. Trong một số ROW_FORMATs trong InnoDB, hoặc TEXT hoặc VARCHAR có thể là một con trỏ đến một phần mở rộng cho hàng. Hành động phụ thuộc chủ yếu vào ROW_FORMAT, không phải kiểu dữ liệu.

Các vấn đề liên quan