Tôi đang xây dựng API RESTful sử dụng mã thông báo JWT để xác thực người dùng (do login
điểm cuối phát hành và được gửi trong tất cả các tiêu đề sau đó) và mã thông báo cần được làm mới sau một khoảng thời gian cố định (gọi renew
điểm cuối, trả về mã thông báo được gia hạn ).
Có thể phiên API của người dùng trở nên không hợp lệ trước khi mã thông báo hết hạn, do đó tất cả các điểm cuối của tôi bắt đầu bằng cách kiểm tra xem: 1) mã thông báo vẫn còn hiệu lực và 2) phiên của người dùng vẫn hợp lệ. Không có cách nào để vô hiệu hóa trực tiếp mã thông báo, bởi vì khách hàng lưu trữ cục bộ.
Do đó, tất cả các điểm cuối của tôi phải báo hiệu cho khách hàng của tôi về hai điều kiện có thể: 1) rằng đã đến lúc phải gia hạn mã thông báo hoặc 2) rằng phiên đã trở nên không hợp lệ và chúng không còn được phép truy cập hệ thống. Tôi có thể nghĩ ra hai lựa chọn thay thế cho các điểm cuối của mình để báo hiệu cho khách hàng của họ khi một trong hai điều kiện xảy ra (giả sử rằng các máy khách có thể được điều chỉnh theo một trong hai tùy chọn):
- Trả lại mã http 401 (trái phép) nếu phiên trở nên không hợp lệ hoặc trả lại mã 412 (điều kiện tiên quyết không thành công) khi mã thông báo đã hết hạn và đã đến lúc gọi
renew
điểm cuối, mã này sẽ trả về mã 200 (ok). - Trả về 401 để báo hiệu rằng phiên không hợp lệ hoặc mã thông báo đã hết hạn. Trong trường hợp này, máy khách sẽ gọi ngay
renew
điểm cuối, nếu nó trả về 200 thì mã thông báo được làm mới, nhưng nếurenew
cũng trả về 401 thì có nghĩa là máy khách đã ra khỏi hệ thống.
Bạn muốn giới thiệu phương án nào trong hai phương án trên? Cái nào sẽ chuẩn hơn, đơn giản hơn để hiểu và / hoặc nhiều RESTful hơn? Hoặc bạn muốn đề xuất một cách tiếp cận khác nhau hoàn toàn? Bạn có thấy bất kỳ vấn đề rõ ràng hoặc rủi ro bảo mật với một trong hai tùy chọn không? Thêm điểm nếu câu trả lời của bạn bao gồm các tài liệu tham khảo bên ngoài hỗ trợ ý kiến của bạn.
CẬP NHẬT
Các bạn, xin vui lòng tập trung vào câu hỏi thực tế - trong số hai lựa chọn thay thế mã http để báo hiệu sự vô hiệu hóa gia hạn / phiên là tốt nhất? Đừng bận tâm rằng hệ thống của tôi sử dụng các phiên JWT và phía máy chủ, đó là một đặc thù của API của tôi đối với các quy tắc kinh doanh rất cụ thể và không phải là phần tôi đang tìm kiếm trợ giúp;)