cuốn sách gpt4 ai đã làm

[Nói chuyện linh tinh] Chọn Session hay JWT?

In lại Tác giả: Sahara Thời gian cập nhật: 2024-12-16 14:49:42 58 4
mua khóa gpt4 Nike

Làm thế nào để máy chủ xác minh rằng khách hàng đã đăng nhập?

Sau khi người dùng đăng nhập thành công, máy chủ sẽ cấp chứng chỉ. Sau đó, mỗi yêu cầu từ máy khách cần mang theo thông tin xác thực. Máy chủ xác minh tính hợp lệ của thông tin xác thực để xác định xem người dùng đã đăng nhập và xử lý yêu cầu hay chưa.

Dưới đây là những khác biệt giữa Phiên và JWT về vấn đề này:

1. Nội dung giấy chứng nhận là gì?

  • Phiên họp: Thông tin xác thực rất đơn giản chuỗi ID, được sử dụng để ánh xạ thông tin phiên được lưu trữ ở phía máy chủ.
JSESSIONID=8C3C44A3A0B522F1B93D3F8C4F17F2E7; Đường dẫn=/ứng dụng web của bạn HttpOnly;
  • JWT: Thông tin xác thực là một khép kín Mã thông báo có thể được giải mã để lấy trực tiếp thông tin phiên (chẳng hạn như thông tin người dùng, quyền, v.v.).
//Định dạng mã thông báo JWT
..

//Mã thông báo trường hợp JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik pvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.S5rf1jOSGbHkGBv1buVpzCHYtoJXnJkK9J9M2yExhms

//Giải mã từng phần của mã thông báo trường hợp JWT
{"tảo":"HS256","kiểu":"JWT"}.{"id người dùng":"1234567890","tên":"John Doe","đó":1516239022}.S5rf1jOSGbHkGBv1buVpzCHYtoJXnJkK9J9M2yExhms

//Lưu ý: JWT không mã hóa dữ liệu mà chỉ cung cấp chữ ký để ngăn nội dung bị giả mạo. Tiêu đề và Tải trọng đều là văn bản rõ ràng.

2. Làm thế nào để chuyển chứng chỉ?

  • Phiên họp: Máy chủ vượt qua Đặt cookie Thông tin xác thực được gửi đến khách hàng và khách hàng lưu trữ thông tin xác thực trong cookie và chuyển chúng theo từng yêu cầu. Cookie tiêu đề để gửi nó trở lại máy chủ.
  • JWT: Máy chủ trả về thông tin xác thực cho máy khách và máy khách lưu trữ chúng trong lưu trữ cục bộ hoặc phiênStorage ở giữa. Trong các yêu cầu tiếp theo, client sẽ chuyển Ủy quyền Tiêu đề chuyển JWT đến máy chủ.

3. Máy chủ phát hiện thông tin xác thực bằng cách nào?

  • Phiên họp: Máy chủ nhận được id phiên Truy vấn thông tin phiên Nếu phiên tồn tại, quá trình xác minh sẽ được thông qua và máy chủ tiếp tục xử lý yêu cầu.
  • JWT: Máy chủ xác minh chữ ký trong JWT Việc chuyển chữ ký cho biết rằng chứng chỉ chưa bị giả mạo và thực sự được cấp bởi máy chủ. (Hãy nhớ sửa đổi khóa ký JWT khi mở ứng dụng thứ hai, nếu không JWT từ các hệ thống khác cũng có thể truy cập vào hệ thống của bạn)

4. Thông tin xác thực được lưu trữ ở đâu?

  • Phiên họp: Thông tin xác thực được lưu trữ trong bộ nhớ máy chủ hoặc trong hệ thống bộ nhớ dùng chung (chẳng hạn như Redis).
  • JWT: Thông tin xác thực được lưu trữ trong thông tin xác thực của khách hàng và bản thân mã thông báo JWT chứa tất cả thông tin xác thực.

Về việc mở rộng theo chiều ngang

Nhược điểm của Session.

Khi hệ thống chỉ có một dịch vụ duy nhất, thông tin phiên có thể được lưu trữ bên trong ứng dụng. Nhưng sau khi dịch vụ được chia thành nhiều nút, thông tin phiên cần được di chuyển sang bộ nhớ dùng chung (chẳng hạn như Redis). Tại thời điểm này, tất cả các yêu cầu dịch vụ phải truy cập Redis. Nếu Redis bị lỗi hoặc ngừng hoạt động, dịch vụ sẽ không hoạt động bình thường cho đến khi Redis được khôi phục.

Ưu điểm của JWT.

Ưu điểm chính của JWT là tính chất khép kín, với tất cả thông tin xác thực được lưu trữ trong thông tin xác thực của khách hàng. Vì chữ ký JWT được xác minh thông qua khóa của máy chủ nên máy chủ không cần truy cập vào hệ thống lưu trữ dùng chung (chẳng hạn như Redis) và mỗi nút dịch vụ có thể xác minh thông tin xác thực một cách độc lập. Điều này giúp JWT có lợi thế hơn trong các kiến trúc phân tán và tránh được rủi ro một điểm khi Redis thất bại.


Giới thiệu về điều khiển phiên

Ưu điểm của Phiên.

Vì thông tin phiên được lưu trữ trên máy chủ nên máy chủ có thể dễ dàng quản lý phiên. Ví dụ: nếu bạn cần đá ai đó, bạn có thể xóa trực tiếp thông tin phiên trong Redis hoặc bộ nhớ khi đó yêu cầu của khách hàng sẽ bị từ chối và người dùng sẽ cần phải đăng nhập lại.

Nhược điểm của JWT.

Vì JWT được lưu trữ trên máy khách nên máy chủ không thể xóa trực tiếp thông tin xác thực của máy khách. Nếu bạn cần triển khai thao tác khởi động, máy chủ phải ghi lại ID mã thông báo do người dùng cấp và ngăn khách hàng sử dụng thông tin đăng nhập đã hết hạn thông qua danh sách đen.

Đôi khi mọi người lo lắng rằng việc sử dụng danh sách đen sẽ tương tự như Session, vốn vẫn dựa vào kho dữ liệu trung tâm. Nhưng nó có thể được giải quyết bằng cách:

  • Dữ liệu trung tâm (Redis) lưu trữ trạng thái chữ ký người dùng và đẩy danh sách đen đến từng ứng dụng.
  • Mỗi ứng dụng giữ một bản sao của danh sách đen cục bộ, do đó không cần phải truy vấn thường xuyên vào cửa hàng trung tâm.

Ngoài ra, JWT có thời gian hết hạn và danh sách đen có thể đặt thời gian hết hạn tương tự để tránh việc lưu trữ dữ liệu quá mức. Hơn nữa, các hoạt động kick không diễn ra thường xuyên nên lượng dữ liệu trong blacklist sẽ không lớn.

Nếu không có nhu cầu chặn JWT “ngay lập tức”, bạn có thể cân nhắc sử dụng JWT vòng đời ngắn kết hợp với cơ chế làm mới. Phương pháp này cũng rất phổ biến. Nghĩa là, máy chủ trả về hai mã thông báo:

  • access_token (JWT)
  • làm mới_token (Thường là UUID, server lưu key vào Redis, value là thông tin người dùng)

Máy khách sử dụng Refresh_token để tạo access_token mới.

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik pvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.S5rf1jOSGbHkGBv1buVpzCHYtoJXnJkK9J9M2yExhms
" "refresh_token": "c0cdf579-54d5-46fc-8e1b-bd42bd01b556"
}

  .


Giới thiệu về lưu trữ phiên

  • Phiên họp: Vì thông tin phiên được lưu trữ ở phía máy chủ nên máy chủ có thể lưu trữ một số dữ liệu được truy cập thường xuyên trong phiên.
  • JWT: Nội dung phiên của JWT là văn bản thuần túy Có, mặc dù chữ ký có thể ngăn chặn việc giả mạo nhưng nó vẫn có thể đọc được, vì vậy không nên đặt dữ liệu nhạy cảm vào JWT. Ngoài ra, JWT được mang theo với mọi yêu cầu Dữ liệu quá mức sẽ chiếm băng thông nên không phù hợp để lưu trữ quá nhiều thông tin.

Giới thiệu về kiểm soát định tuyến trang

  • JWT lý tưởng cho SPA (Ứng dụng một trang) vì việc kiểm soát định tuyến trang thường là trách nhiệm của giao diện người dùng và giao diện phụ trợ chỉ xác minh quyền truy cập dữ liệu thông qua JWT.

  • Đối với MPA (Ứng dụng nhiều trang), có thể gặp khó khăn khi sử dụng JWT để kiểm soát quyền truy cập trang. Bởi vì trong hành vi của trình duyệt (chẳng hạn như làm mới trang), JWT cần được chuyển qua tiêu đề Ủy quyền, nhưng khi làm mới trang, hành vi của trình duyệt không thể trực tiếp mang thông tin này.

Giải pháp: Phần phụ trợ không chỉ có thể trả về JWT trong phần nội dung khi người dùng đăng nhập mà còn chuyển mã thông báo thông qua Set-Cookie. Bằng cách này, JWT sẽ tự động được mang khi khách hàng đưa ra yêu cầu và mã thông báo có thể được lấy từ hai nguồn dữ liệu của tiêu đề Cookie hoặc Ủy quyền trong quá trình xác minh back-end.


Tóm tắt

  • Phiên họp: Lưu trữ thông tin phiên ở phía máy chủ và thông tin xác thực là ID phiên. Thông tin này phù hợp với các kịch bản ứng dụng đơn lẻ hoặc môi trường yêu cầu bộ nhớ dùng chung (chẳng hạn như Redis), nhưng dựa trên hệ thống lưu trữ dùng chung.
  • JWT: Chứng chỉ chứa tất cả thông tin xác thực và đảm bảo tính toàn vẹn của nó thông qua chữ ký. Nó phù hợp với kiến trúc phân tán và không cần dựa vào hệ thống lưu trữ bên ngoài.

Trong hệ thống phân tán được chia thành nhiều dịch vụ, JWT tránh nguy cơ xảy ra lỗi một điểm thông qua cơ chế tự chứng nhận, trong khi Session yêu cầu hệ thống lưu trữ đáng tin cậy để chia sẻ thông tin phiên. Phương pháp cụ thể để lựa chọn cần được xác định dựa trên quy mô, yêu cầu và khả năng chịu lỗi của hệ thống.

Cuối cùng, bài viết này là về [Trò chuyện linh tinh] Làm thế nào để chọn: Session hay JWT? Bài viết này chỉ vậy thôi. Nếu bạn muốn biết thêm về [Trò chuyện linh tinh], làm thế nào để chọn: Session hay JWT? Về nội dung, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

58 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress