Tôi mới đọc bài viết này đã vài năm tuổi nhưng mô tả một cách thông minh để bảo mật API REST của bạn. Bản chất:
- Mỗi khách hàng có một cặp khóa công khai / riêng
- Chỉ có máy khách và máy chủ biết khóa riêng; nó không bao giờ được gửi qua dây
- Với mỗi yêu cầu, khách hàng nhận một số đầu vào (toàn bộ chính yêu cầu, dấu thời gian hiện tại và khóa riêng) và chạy chúng thông qua chức năng HMAC để tạo ra hàm băm của yêu cầu
- Sau đó, khách hàng sẽ gửi yêu cầu bình thường (chứa khóa chung) và hàm băm đến máy chủ
- Máy chủ tra cứu khóa riêng của khách hàng (dựa trên khóa chung được cung cấp) và thực hiện kiểm tra dấu thời gian (mà tôi không hiểu) xác minh rằng yêu cầu không phải là nạn nhân của một cuộc tấn công phát lại
- Nếu tất cả đều ổn, thì máy chủ sẽ sử dụng khóa riêng và cùng chức năng HMAC để tạo ra hàm băm của yêu cầu
- Sau đó, máy chủ sẽ so sánh cả hai giá trị băm (cái được gửi bởi máy khách cũng như cái mà nó tạo ra); nếu chúng khớp, yêu cầu được xác thực và được phép tiến hành
Sau đó tôi tình cờ gặp JWT , nghe có vẻ rất giống nhau. Tuy nhiên, bài viết đầu tiên hoàn toàn không đề cập đến JWT, và vì vậy tôi tự hỏi liệu JWT có khác với giải pháp xác thực ở trên không, và nếu có thì làm thế nào.