Ghi chú của biên tập viên. Hướng dẫn xác thực JWT này được cập nhật lần cuối vào ngày 1 tháng 7 năm 2021. Nó vẫn có thể chứa thông tin lỗi thời
Trong hướng dẫn xác thực JWT này, bạn sẽ tìm hiểu khi nào nên sử dụng JWT, tại sao bạn không nên sử dụng JWT cho các phiên và cách lưu trữ JWT trong cookie để tránh các sự cố bảo mật. Chúng ta cũng sẽ điểm qua một số phương pháp hay nhất về JWT
Đây là những gì chúng tôi sẽ đề cập
JSON Web Tokens [JWT] là một đại diện được mã hóa JSON của một hoặc nhiều xác nhận quyền sở hữu có thể được chuyển giao giữa hai bên
Mặc dù đây là một công nghệ rất phổ biến, nhưng xác thực JWT cũng gây ra nhiều tranh cãi. Một số người nói rằng bạn không bao giờ nên sử dụng nó. Những người khác nói xác thực JWT thật tuyệt vời
Sự thật nằm đâu đó ở giữa. giá trị của việc sử dụng JWT tùy thuộc vào trường hợp sử dụng và yêu cầu dự án của bạn
Trước khi tìm hiểu sâu hơn, hãy xem xét ngắn gọn xác thực JWT là gì
JWT là gì?
JWT là một cơ chế để xác minh chủ sở hữu của một số dữ liệu JSON. Đó là một chuỗi được mã hóa, an toàn cho URL, có thể chứa lượng dữ liệu không giới hạn [không giống như cookie] và được ký bằng mật mã
Khi một máy chủ nhận được JWT, nó có thể đảm bảo dữ liệu chứa trong đó đáng tin cậy vì nó được ký bởi nguồn. Không người trung gian nào có thể sửa đổi JWT sau khi được gửi
Điều quan trọng cần lưu ý là JWT đảm bảo quyền sở hữu dữ liệu nhưng không mã hóa. Dữ liệu JSON bạn lưu trữ trong JWT có thể được nhìn thấy bởi bất kỳ ai chặn mã thông báo vì nó chỉ được tuần tự hóa, không được mã hóa
Vì lý do này, chúng tôi khuyên bạn nên sử dụng HTTPS với JWT [nhân tiện, và HTTPS nói chung]
Chúng tôi sẽ không trình bày chi tiết về cách JWT được tạo ra. Để có cái nhìn chuyên sâu, cập nhật về cách hoạt động của xác thực JWT, hãy xem “Xác thực JWT từ đầu với Vue. js và nút. js. ”
Khi nào nên sử dụng xác thực JWT
JWT là một công nghệ đặc biệt hữu ích để xác thực API và ủy quyền từ máy chủ đến máy chủ
Để có hướng dẫn toàn diện về cách sử dụng công nghệ JWT để xác thực API, hãy xem “Cách bảo mật API REST bằng JWT. ”
Tại sao bạn không nên sử dụng JWT làm mã thông báo phiên
Mặt khác, theo mặc định, bạn không nên sử dụng JWT làm mã thông báo phiên. Đối với một điều, JWT có nhiều tính năng và phạm vi rộng, làm tăng khả năng xảy ra lỗi, bởi tác giả thư viện hoặc người dùng
Một vấn đề khác là bạn không thể xóa JWT vào cuối phiên vì nó độc lập và không có cơ quan trung ương nào vô hiệu hóa chúng
Cuối cùng, nói một cách đơn giản, JWT tương đối lớn. Khi được sử dụng với cookie, điều này làm tăng thêm rất nhiều chi phí cho mỗi yêu cầu
Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn
Ban đầu, sử dụng JWT cho mã thông báo phiên có vẻ là một ý tưởng hay bởi vì
- Bạn có thể lưu trữ bất kỳ loại chi tiết người dùng nào trên máy khách
- Máy chủ có thể tin tưởng máy khách vì JWT đã được ký và không cần gọi cơ sở dữ liệu để truy xuất thông tin bạn đã lưu trữ trong JWT
- Bạn không cần điều phối các phiên trong cơ sở dữ liệu tập trung khi gặp vấn đề cuối cùng về mở rộng theo chiều ngang
Cuối cùng, nếu bạn đã có cơ sở dữ liệu cho ứng dụng của mình, chỉ cần sử dụng bảng phiên và sử dụng các phiên thông thường do khung lựa chọn phía máy chủ cung cấp
Tại sao? . chúng được gửi cho mọi yêu cầu đến máy chủ và luôn có chi phí cao so với các phiên phía máy chủ
Ngoài ra, mặc dù các rủi ro bảo mật được giảm thiểu khi gửi JWT bằng HTTPS, luôn có khả năng nó bị chặn và dữ liệu bị giải mã, làm lộ dữ liệu người dùng của bạn
Sử dụng JWT để xác thực API
Một cách sử dụng rất phổ biến đối với JWT — và có lẽ là cách sử dụng tốt duy nhất — là cơ chế xác thực API
Công nghệ JWT phổ biến và được sử dụng rộng rãi đến mức Google sử dụng nó để cho phép bạn xác thực các API của nó
ý tưởng thật đơn giản. bạn nhận được mã thông báo bí mật từ dịch vụ khi thiết lập API
Về phía client, bạn tạo token [có nhiều thư viện cho cái này] dùng secret token để ký
Khi bạn chuyển nó như một phần của yêu cầu API, máy chủ sẽ biết đó là ứng dụng khách cụ thể vì yêu cầu được ký bằng mã định danh duy nhất của nó
Cách hết hạn một mã thông báo JWT
Làm cách nào để bạn vô hiệu hóa một mã thông báo? . Tuy nhiên, điều này không lý tưởng cho người dùng, những người có thể hết hạn mã thông báo mà không có lý do
Một cách để làm điều đó là thêm một thuộc tính vào đối tượng người dùng của bạn trong cơ sở dữ liệu máy chủ để tham chiếu ngày và giờ tạo mã thông báo
Các bài viết hay khác từ LogRocket
- Đừng bỏ lỡ một khoảnh khắc nào với The Replay, một bản tin được tuyển chọn từ LogRocket
- Tìm hiểu cách Galileo của LogRocket loại bỏ tiếng ồn để chủ động giải quyết các sự cố trong ứng dụng của bạn
- Sử dụng useEffect của React để tối ưu hóa hiệu suất ứng dụng của bạn
- Chuyển đổi giữa nhiều phiên bản của Node
- Khám phá cách tạo hoạt ảnh cho ứng dụng React của bạn với AnimXYZ
- Khám phá Tauri, một khuôn khổ mới để xây dựng các tệp nhị phân
- So sánh NestJS với. Thể hiện. js
Mã thông báo tự động lưu trữ giá trị này trong thuộc tính iat
. Mỗi khi bạn kiểm tra mã thông báo, bạn có thể so sánh giá trị iat
của nó với thuộc tính user
phía máy chủ
Để vô hiệu hóa mã thông báo, chỉ cần cập nhật giá trị phía máy chủ. Nếu iat
cũ hơn cái này, bạn có thể từ chối mã thông báo
Một cách khác để đạt được điều này là thiết lập danh sách chặn trong cơ sở dữ liệu của bạn được lưu trong bộ nhớ đệm [hoặc tốt hơn nữa là danh sách cho phép]
Cách lưu trữ an toàn JWT trong cookie
JWT cần được lưu trữ ở nơi an toàn bên trong trình duyệt của người dùng. Nếu bạn lưu trữ nó bên trong localStorage, nó có thể truy cập được bằng bất kỳ tập lệnh nào trong trang của bạn. Điều này nghe có vẻ tệ;
Để nhắc lại, bất kể bạn làm gì, đừng lưu trữ JWT trong bộ nhớ cục bộ [hoặc bộ nhớ phiên]. Nếu bất kỳ tập lệnh bên thứ ba nào mà bạn đưa vào trang của mình bị xâm phạm, tập lệnh đó có thể truy cập vào tất cả các mã thông báo của người dùng của bạn
Để giữ chúng an toàn, bạn phải luôn lưu trữ JWT bên trong cookie httpOnly. Đây là một loại cookie đặc biệt chỉ được gửi trong các yêu cầu HTTP đến máy chủ. Nó không bao giờ có thể truy cập [cả để đọc hoặc viết] từ JavaScript đang chạy trong trình duyệt
Sử dụng JWT để xác thực SPA
JWT có thể được sử dụng làm cơ chế xác thực không yêu cầu cơ sở dữ liệu. Máy chủ có thể tránh sử dụng cơ sở dữ liệu vì kho lưu trữ dữ liệu trong JWT được gửi tới máy khách là an toàn
Sử dụng JWT để ủy quyền hoạt động trên các máy chủ
Giả sử bạn có một máy chủ mà bạn đã đăng nhập, SERVER1, máy chủ này sẽ chuyển hướng bạn đến một máy chủ khác SERVER2 để thực hiện một số loại thao tác
SERVER1 có thể cấp cho bạn JWT cho phép bạn SERVER2. Hai máy chủ đó không cần chia sẻ phiên hoặc bất kỳ thứ gì để xác thực bạn. Mã thông báo là hoàn hảo cho trường hợp sử dụng này
Cách chọn thư viện JWT tốt nhất
Làm cách nào để bạn quyết định sử dụng thư viện JWT nào trong dự án của mình?
Trang web chứa danh sách các thư viện phổ biến nhất triển khai JWT, bao gồm các thư viện cho Node. js, Python, Rust, Go, JavaScript và nhiều thứ khác
Chọn ngôn ngữ bạn chọn và chọn thư viện mà bạn thích — lý tưởng nhất là thư viện có số lần kiểm tra màu xanh lá cây cao nhất
Phần kết luận
JWT là một tiêu chuẩn rất phổ biến mà bạn có thể sử dụng để tin cậy các yêu cầu bằng cách sử dụng chữ ký và trao đổi thông tin giữa các bên. Đảm bảo rằng bạn biết khi nào nên sử dụng nó tốt nhất, khi nào nên sử dụng thứ khác là tốt nhất và cách ngăn chặn các sự cố bảo mật cơ bản nhất
Đăng NhậpTên Lửa. Khả năng hiển thị đầy đủ vào web và ứng dụng dành cho thiết bị di động của bạn
LogRocket là một giải pháp giám sát ứng dụng giao diện người dùng cho phép bạn phát lại các sự cố như thể chúng đã xảy ra trong trình duyệt của chính bạn. Thay vì đoán tại sao xảy ra lỗi hoặc yêu cầu người dùng chụp ảnh màn hình và kết xuất nhật ký, LogRocket cho phép bạn phát lại phiên để nhanh chóng hiểu điều gì đã xảy ra. Nó hoạt động hoàn hảo với bất kỳ ứng dụng nào, bất kể khung công tác nào và có các plugin để ghi lại ngữ cảnh bổ sung từ Redux, Vuex và @ngrx/store
Ngoài việc ghi nhật ký các hành động và trạng thái Redux, LogRocket còn ghi nhật ký bảng điều khiển, lỗi JavaScript, dấu vết ngăn xếp, yêu cầu/phản hồi mạng với tiêu đề + nội dung, siêu dữ liệu trình duyệt và nhật ký tùy chỉnh. Nó cũng cung cấp công cụ cho DOM để ghi lại HTML và CSS trên trang, tạo lại các video hoàn hảo về pixel của ngay cả các ứng dụng dành cho thiết bị di động và trang đơn phức tạp nhất