cookie so với phiên vs jwt


12

Tôi đang đọc về xác thực / ủy quyền trong các ứng dụng web. Bất cứ ai có thể xác nhận / sửa chữa kiến ​​thức hiện tại của tôi?

  • Cookies: trong phiên bản đầu tiên của họ, một tệp văn bản với một ứng dụng khách duy nhất Id tất cả các thông tin khác cần thiết về máy khách (ví dụ: vai trò)

  • Phiên: chỉ id khách hàng duy nhất được gửi trong một tệp (còn được gọi là cookie), mọi thứ khác được lưu trữ trên máy chủ

  • JWT: mọi thứ được lưu trữ trong mã thông báo (cũng có thể được lưu trữ trong tệp văn bản, còn được gọi là cookie)

Cảm ơn cho bất kỳ thông tin phản hồi!

Câu trả lời:


12

Cookies: trong phiên bản đầu tiên của họ, một tệp văn bản với một ứng dụng khách duy nhất Id tất cả các thông tin khác cần thiết về máy khách (ví dụ: vai trò)

Cookies là các bộ dữ liệu key-valueban đầu được xử lý để giữ lại dữ liệu liên quan đến hoạt động của khách hàng. Đây duy trì là những gì chúng ta biết là phiên hoặc trạng thái ứng dụng . Về cơ bản, chúng được tạo ra để giữ trạng thái của các ứng dụng web; cụ thể hơn, nhà nước ở phía khách hàng. (1)

Cookies thường được đặt bởi máy chủ thông qua các tiêu đề phản hồi ( Set-Cookie key=value). Tuy nhiên, chúng cũng có thể được thiết lập bởi khách hàng. Ví dụ: bởi DOM ( document.cookie).

Một điều quan trọng cần biết về cookie là họ không xác định người dùng. Họ thay vì liên kết dữ liệu terna - máy khách - máy chủ / đường dẫn . (3)

Chúng tôi thường liên kết cookie với các tệp vì trong những ngày đầu của trình duyệt web, họ phải duy trì cookie bằng cách nào đó, là các tệp hỗ trợ khả thi nhất. Các trình duyệt ngày nay lưu trữ cookie (trong số những thứ khác) trong kho lưu trữ cục bộ (DB nhúng).

Phiên: chỉ id khách hàng duy nhất được gửi trong một tệp (còn được gọi là cookie), mọi thứ khác được lưu trữ trên máy chủ.

Theo phiên, tôi đoán bạn có nghĩa là phiên máy chủ . Như tôi đã nhận xét, các phiên cũng có thể được thực hiện ở phía khách hàng. Sự khác biệt với các phiên phía máy khách là dữ liệu được lưu trữ ở đâu đó trên phía máy chủ. (2) Trong các trường hợp như vậy, những gì chúng ta nhận được là id phiên; và chúng tôi nhận được nó dưới dạng cookie. Nếu không có id phiên, máy chủ sẽ không thể tương quan các yêu cầu đến với hoạt động trước đó của máy khách. (3) Ví dụ: người dùng được xác thực, giỏ hàng, v.v.

Trong mọi trường hợp, ID phiên không nhất thiết phải xác định người dùng. Nó liên kết một trạng thái ứng dụng cụ thể với một máy khách web. Phiên có thể hoặc không thể chứa dữ liệu người dùng.

Trong các ứng dụng phân tán, phiên nên được tuần tự hóa vì lý do rõ ràng. Nếu chúng được lưu trữ trong bộ nhớ, bộ nhớ trong (bộ phận) nên được tuần tự hóa. Một giải pháp phổ biến là lưu trữ các phiên trong tệp. Hoặc trong NoQuery DB như Redis.

Về an ninh. Các phiên phía máy chủ an toàn hơn phía máy khách. Khách hàng dễ bị đe dọa hơn bởi vì người dùng thường không biết về rất nhiều mối đe dọa mà họ tiếp xúc. Ít nhất không phải là người dùng thường xuyên.

Mặt khác, tấn công cơ sở hạ tầng phía máy chủ không phải là một phần ba.

JWT: mọi thứ được lưu trữ trong mã thông báo (cũng có thể được lưu trữ trong tệp văn bản, còn được gọi là cookie)

Không hẳn vậy. JWT lưu trữ dữ liệu chủ yếu liên quan đến ủy quyền và nhà phát hành mã thông báo.

Mặc dù họ sử dụng để chứa ID người dùng (phụ), chúng tôi tìm thấy JWT không xác định người dùng được xác thực. Ví dụ: mã thông báo cho các phiên của khách. Nội dung chính của JWT là khiếu nại ; các mục để được kiểm tra bởi quá trình ủy quyền.

Điều quan trọng cần nhớ là JWT không phải là kho lưu trữ toàn cầu . Các phiên hoặc các trạng thái ứng dụng vẫn phải được lưu trữ ở đâu đó và được quản lý một cách độc lập.

Về JWT, chúng thường được lưu trữ dưới dạng cookie, mặc dù chúng cũng có thể được lưu trữ trong kho lưu trữ địa phương. Hơn nữa, cộng đồng OWASP coi sessionStorage là an toàn hơn cho các trình duyệt web. Tuy nhiên, nó phụ thuộc vào phiên bản của trình duyệt .


1: World Wide Web có nghĩa là không trạng thái. Nếu chúng tôi muốn xây dựng các ứng dụng phía máy chủ không trạng thái, các phiên nên được lưu trữ ở đâu đó trong phía máy khách.

2: Biến ứng dụng phía máy chủ thành ứng dụng trạng thái .

3: Khách hàng là ứng dụng, không phải là người dùng.


Id lưu ý rằng một số, như cấu hình Ruby on Rails mặc định, lưu trữ toàn bộ đối tượng "phiên" trong cookie (ngày nay thường được mã hóa), có thể chỉ đơn giản chứa một cái gì đó giống như user_idcho người dùng đã đăng nhập.
Lancer lửa

7

Cookies: trong phiên bản đầu tiên của họ, một tệp văn bản với một ứng dụng khách duy nhất Id tất cả các thông tin khác cần thiết về máy khách (ví dụ: vai trò)

Định nghĩa của bạn về cookie không thực sự mô tả những gì họ làm. Cookie là một cặp khóa-giá trị được đặt thông qua tiêu đề phản hồi HTTP ( Set-Cookie) bởi máy chủ và được lưu trữ bởi các máy khách hỗ trợ chúng. Cookie được gửi lại với mỗi yêu cầu tiếp theo (trong Cookietiêu đề) cho các yêu cầu phù hợp với sơ đồ, máy chủ, đường dẫn, https trong khi cookie chưa hết hạn. Bạn có thể lưu trữ bất cứ thứ gì bạn muốn trong cookie và nó cho phép bạn hỗ trợ trạng thái trên giao thức không trạng thái của HTTP.

Một ví dụ trao đổi cookie trông như thế này:

nhập mô tả hình ảnh ở đây

Phiên: chỉ id khách hàng duy nhất được gửi trong một tệp (còn được gọi là cookie), mọi thứ khác được lưu trữ trên máy chủ

Điều đó khá đúng. Phiên là dữ liệu được lưu trữ ở phía máy chủ về phiên hiện tại của người dùng. Để thực hiện công việc này trong một giao thức không trạng thái như HTTP, người dùng phải gửi ID phiên của họ với mỗi yêu cầu, để máy chủ có thể tìm nạp phiên chính xác cho người dùng. Id phiên thường được lưu trữ trong cookie (xem bên trên). Đây không phải là một cookie khác với bất kỳ cookie nào khác, dữ liệu chỉ là ID của máy chủ cho phiên người dùng.

JWT: mọi thứ được lưu trữ trong mã thông báo (cũng có thể được lưu trữ trong tệp văn bản, còn được gọi là cookie)

Điều đó khá đúng. Tất cả mọi thứ được lưu trữ trong mã thông báo. Mã thông báo có thể được lưu trữ trong cookie (xem bên trên). Đây là một thay thế cho các phiên của máy chủ và nó hoạt động vì mã thông báo được ký và xác minh bởi máy chủ, vì vậy nó không thể bị thay đổi hoặc giả mạo và an toàn khi lưu trữ ở phía máy khách.


JWT thường không được lưu trữ trong cookie theo kinh nghiệm của tôi. Chúng có thể, nhưng thường xuyên hơn tôi đã nhìn thấy chúng trong các tiêu đề của riêng chúng (hoặc thường là tiêu đề Ủy quyền) trên đường đến máy chủ và được lưu trữ trong bộ nhớ hoặc trong bộ nhớ cục bộ hoặc Phiên trên máy khách.
Paul

1
@Paul liên quan đến lưu trữ địa phương. Nó phụ thuộc vào khách hàng. Không phải tất cả các máy khách và không phải tất cả các phiên bản của các máy khách được sử dụng nhiều nhất đều hỗ trợ lưu trữ web. Hãy nhìn vào đây . Nếu có, tốt hơn là tạo mã thông báo theo mùa . Nhưng, nếu khách hàng của chúng tôi không hỗ trợ lưu trữ cục bộ; Cookie Httponly + SSL + fingerPrints cung cấp cho chúng tôi triển khai khá an toàn.
Laiv

@Laiv Tôi không đồng ý với bạn; chỉ cần Samuel nói rằng "Mã thông báo được lưu trữ trong cookie" và tôi chỉ cố gắng quan sát rằng điều này không phải lúc nào cũng đúng.
Paul

@Paul Tôi đã thay đổi thành "... có thể được lưu trữ trong cookie"
Samuel
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.