Làm cách nào để kích hoạt xác thực JWT?

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

Tìm hiểu thêm →

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

Xác thực JWT được thực hiện như thế nào?

Quy trình ủy quyền JWT như sau. .
Người dùng cuối đăng nhập, ứng dụng khách gửi yêu cầu xác thực tới Cổng API hoặc tới bất kỳ nhà phát hành JWT bên thứ ba nào để nhận mã thông báo JWT
Nếu API Gateway là nhà phát hành JWT, thì nó sẽ xác thực người dùng hoặc ứng dụng

JWT là gì và tại sao nó được sử dụng?

Mã thông báo web JSON [JWT] là Đối tượng JSON được sử dụng để truyền thông tin an toàn qua web [giữa hai bên] . Nó có thể được sử dụng cho một hệ thống xác thực và cũng có thể được sử dụng để trao đổi thông tin. Mã thông báo chủ yếu bao gồm tiêu đề, tải trọng, chữ ký. Ba phần này được ngăn cách bởi dấu chấm [. ].

Chủ Đề