Làm cách nào để sử dụng mã thông báo JWT để ủy quyền?

Một trong những tiêu chuẩn xác thực được sử dụng nhiều nhất trong các ứng dụng web là tiêu chuẩn JSON Web Token. Nó chủ yếu được sử dụng để xác thực, ủy quyền và trao đổi thông tin

Mã thông báo Web JSON được tạo thành từ ba phần được phân tách bằng dấu chấm [.] — và thường trông như thế này. xxxxx.yyyyy.zzzzz. Chúng tương ứng với Tiêu đề, Tải trọng và Chữ ký. Bạn có thể tìm hiểu thêm về mã thông báo JWT tại đây

Và trước khi sử dụng chúng và tiếp tục đọc bài viết này, bạn có thể muốn kiểm tra những ưu điểm so với phương thức xác thực phiên. Bạn có thể tìm hiểu thêm về JWT so với. Phiên ở đây

Xác thực được thực hiện khi khách hàng chứng minh thành công danh tính của mình thông qua điểm cuối đăng nhập. Nếu thành công, máy chủ sẽ tạo JSON Web Token và gửi phản hồi cho máy khách

Khách hàng sẽ sử dụng JWT này cho mọi yêu cầu đối với tài nguyên được bảo vệ

Máy chủ được xây dựng trên JWT để ủy quyền sẽ tạo JWT khi khách hàng đăng nhập. JWT này đã được ký, vì vậy bất kỳ bên nào khác không thể thay đổi nó

Mỗi khi máy khách có quyền truy cập vào các tài nguyên được bảo vệ, máy chủ sẽ xác minh rằng chữ ký của JWT khớp với tải trọng và tiêu đề của nó để xác định rằng JWT hợp lệ

Sau đó, nếu JWT được xác minh thành công, nó có thể cấp hoặc từ chối quyền truy cập vào tài nguyên

Trao đổi dữ liệu

JWT cũng là một cách tuyệt vời để bảo mật việc truyền thông tin giữa các bên — chẳng hạn như hai máy chủ — và bởi vì bạn có thể xác minh tính hợp lệ của mã thông báo [chữ ký, cấu trúc hoặc các tiêu chuẩn được yêu cầu trong JWT]

Mã thông báo có thể hủy bỏ

JWT không yêu cầu bất kỳ tra cứu cơ sở dữ liệu nào, vì vậy việc thu hồi chúng trước khi hết hạn là khá khó khăn

Thu hồi là rất quan trọng trong nhiều trường hợp

Ví dụ: khi đăng xuất người dùng hoặc cấm người dùng hoặc thay đổi quyền hoặc mật khẩu ngay lập tức, nếu mã thông báo chưa được thu hồi, người dùng có thể tiếp tục thực hiện yêu cầu ngay cả khi người dùng này không còn có quyền cần thiết để

Thông tin nhạy cảm

JWT thường được ký để bảo vệ chống thao túng hoặc thay đổi dữ liệu. Với điều này, dữ liệu có thể dễ dàng đọc hoặc giải mã

Vì vậy, bạn không thể bao gồm thông tin nhạy cảm như hồ sơ của người dùng hoặc bất kỳ số nhận dạng nào vì dữ liệu không được mã hóa

Yếu tố kích thước cookie

Kích thước của JWT lớn hơn kích thước của mã thông báo phiên. Và điều này có thể nhanh chóng tăng tuyến tính khi bạn thêm nhiều dữ liệu hơn vào JWT. Và bởi vì bạn cần gửi JWT theo từng yêu cầu, nên bạn đang tăng kích thước tải trọng. Điều này có thể trở nên phức tạp nếu có kết nối internet tốc độ thấp

JWT. Thực hành tốt nhất

1] JWT làm Mã thông báo truy cập

JWT có thể được sử dụng làm mã thông báo truy cập để ngăn truy cập không mong muốn vào tài nguyên được bảo vệ. Chúng thường được sử dụng làm mã thông báo Bearer mà API sẽ giải mã và xác thực trước khi gửi phản hồi

Authorization: Bearer 

2] Làm mới logic mã thông báo với JWT

Làm cách nào để bạn nhận được mã thông báo truy cập mới nếu mã thông báo này đã hết hạn? . Nhưng từ điểm Trải nghiệm người dùng, điều này có thể khá khó khăn

JWT có thể được sử dụng làm mã thông báo làm mới;

Ví dụ: khi khách hàng yêu cầu tài nguyên được bảo vệ và nhận được lỗi, điều đó có nghĩa là mã thông báo truy cập đã hết hạn, khách hàng có thể được cấp mã thông báo truy cập mới bằng cách gửi yêu cầu có mã thông báo làm mới trong tiêu đề hoặc nội dung. Nếu mã thông báo làm mới hợp lệ, mã thông báo truy cập mới sẽ được tạo và gửi dưới dạng phản hồi

Lưu ý rằng mã thông báo làm mới thu được khi xác thực và có thời gian tồn tại lâu hơn

3] Sử dụng thuật toán ký nào?

Thật thú vị, JWT có thể được ký bằng nhiều thuật toán khác nhau. Nhưng hãy nhanh chóng nói về giá trị alg trong tiêu đề JWT. Khi nó được giải mã

Giá trị alg trong tiêu đề JWT chỉ đơn giản cho bạn biết JWT đã được ký như thế nào. Ví dụ: với giá trị algRS512

RS512 => RS 512 trong đó RS là thuật toán chữ ký và SHA-512 là thuật toán băm

SHA-512 sẽ tạo ra hàm băm [.]0 trong khi [.]1 sẽ tạo ra hàm băm [.]2. Và mỗi thuật toán này cung cấp cho bạn 50% kích thước đầu ra của mức độ bảo mật. Điều này có nghĩa là, ví dụ, SHA-512 sẽ cung cấp cho bạn bảo mật [.]4

Trong mọi trường hợp, hãy đảm bảo sử dụng tối thiểu bảo mật [.]5

4] Hết hạn, Thời gian phát hành và Độ lệch của đồng hồ

JWT khó thu hồi khi chúng được tạo. Hầu hết thời gian, bạn sẽ phải đợi cho đến khi hết hạn. Đó là lý do tại sao bạn nên sử dụng thời gian hết hạn ngắn

Ngoài ra, bạn có thể triển khai hệ thống thu hồi của riêng mình

JWT đi kèm với yêu cầu dựa trên thời gian [.]6 — phát hành lúc. Nó có thể được sử dụng để từ chối các mã thông báo quá cũ để máy chủ tài nguyên sử dụng. Và độ lệch của đồng hồ chỉ định chênh lệch thời gian được phép [tính bằng giây] giữa đồng hồ của máy chủ và máy khách khi xác minh các xác nhận quyền sở hữu dựa trên thời gian của [.]7 và [.]8. Giá trị mặc định được khuyến nghị mặc định là 5

5] Chữ ký JWT

Phần cuối cùng của JWT là chữ ký, đơn giản là MAC [hoặc Mã xác thực tin nhắn]. Chữ ký này được tạo bởi máy chủ bằng khóa bí mật. Khóa bí mật này là một phần quan trọng của chữ ký JWT

Có hai điều cần lưu ý để giảm xác suất rò rỉ khóa bí mật hoặc tấn công brute force thành công

  • Giữ bí mật khóa bí mật
  • Độ dài khóa tối thiểu phải bằng kích thước bit của hàm băm được sử dụng cùng với thuật toán HMAC

    "Khóa có cùng kích thước với đầu ra hàm băm [ví dụ: 256 bit cho" HS256"] hoặc lớn hơn PHẢI được sử dụng với thuật toán này. " -

6] Nơi lưu trữ mã thông báo?

Cách dễ nhất để lưu trữ mã thông báo ở phía máy khách là [.]9 và xxxxx.yyyyy.zzzzz0. Tuy nhiên, cả hai đều dễ bị tấn công XSS và xxxxx.yyyyy.zzzzz0 sẽ bị xóa nếu đóng trình duyệt

Cách tốt hơn, an toàn hơn là lưu trữ JWT trong cookie. Không thể truy cập cookie qua JavaScript, không thể đọc và viết chúng và điều thú vị là chúng được tự động gửi đến máy chủ

7] Luôn sử dụng HTTPS

Một trong những lợi ích chính của xxxxx.yyyyy.zzzzz2 là nó đi kèm với bảo mật và tin cậy. Các tham số truy vấn và đường dẫn xxxxx.yyyyy.zzzzz3 được mã hóa khi sử dụng xxxxx.yyyyy.zzzzz2

Sau đó, không có nguy cơ ai đó chặn yêu cầu, đặc biệt là mã thông báo đang chuyển tiếp. Các kiểu tấn công này thường được gọi là tấn công MitM [man in the middle] có thể thành công trên các mạng bị xâm phạm hoặc không an toàn

Phần kết luận

Bài viết này đã thảo luận về JWT và một số phương pháp hay nhất để sử dụng hết tiềm năng của nó

JWT chỉ đơn giản là một tiêu chuẩn xác thực với những ưu và nhược điểm của nó. Do đó, biết một số phương pháp hay nhất thực sự có thể giúp bạn sử dụng JWT tốt hơn

JWT có được sử dụng để ủy quyền hoặc xác thực không?

Cả khóa API và JWT đều được sử dụng để xác thực và ủy quyền , nhưng chúng thực hiện theo cách khác. Xác thực cho phép người dùng hoặc ứng dụng sử dụng một hoặc nhiều phương thức của API. Ủy quyền xác định cách họ có thể sử dụng các phương pháp đó.

Tôi có nên sử dụng JWT để xác thực không?

JWT cũng là một cách tuyệt vời để bảo mật việc truyền thông tin giữa các bên — chẳng hạn như hai máy chủ — và bởi vì bạn có thể xác minh tính hợp lệ của mã thông báo [chữ ký, cấu trúc hoặc .

Làm cách nào tôi có thể sử dụng mã thông báo JWT trong lệnh gọi API?

Quy trình .
Đảm bảo rằng xác thực JWT được bật cho API REST bằng cách đặt giá trị của servlet. jwt. xác thực. .
Yêu cầu HTTP đến cho lệnh gọi API REST phải chứa tiêu đề yêu cầu “Ủy quyền” với lược đồ “Bearer” theo sau là JWT. Chữ ký của mã thông báo và ngày hết hạn được hệ thống xác minh

Chủ Đề