Ứng dụng web của tôi được tạo thành từ rất nhiều cuộc gọi Ajax đến phía máy chủ RESTful APIs
. Mỗi lần khách hàng đăng nhập trang web của tôi, trang đăng nhập sẽ nhận được mã thông báo JWT
(Mã thông báo Web JSON) từ máy chủ và lưu nó dưới dạng cookie
ở phía máy khách. (Tôi chọn lưu trữ dưới dạng cookie vì đó là cách duy nhất để trình duyệt tự động gửi trình duyệt và được cho là an toàn hơn Lưu trữ web HTML5). Có một trường trong mã thông báo mô tả ngày hết hạn của mã thông báo. Đối với mỗi cuộc gọi Ajax, mã thông báo được gửi cùng để xác thực.Làm thế nào để xử lý một cách duyên dáng hết hạn đăng nhập cho một cuộc gọi Ajax?
Nếu khách hàng ở lại trên trang của tôi lâu, mã thông báo có thể hết hạn. Và máy chủ sẽ phát hiện nó khi máy khách thực hiện yêu cầu HTTP tiếp theo (không chỉ gọi REST). Tôi sử dụng số servlet filter
để chặn các yêu cầu HTTP all
và kiểm tra mã thông báo hết hạn. Nếu mã thông báo hết hạn, một phản hồi chuyển hướng đến trang đăng nhập sẽ được gửi.
Nhưng có một vấn đề về cách tiếp cận trên: "Cách xử lý một cách duyên dáng chuyển hướng tới trang đăng nhập phản hồi ở phía khách hàng?"
Đối
non-Ajax
có nguồn gốc yêu cầu HTTP, tôi có thể dựa trên trình duyệt để xử lý các phản ứng chuyển hướng để đăng nhập trang và làm cho trang nhảy tự động.Đối
Ajax
có nguồn gốc yêu cầu HTTP, có vẻ như tôi cần phải bổ sung thêm logic đểeach
ajax gọi củacompletion handler
để phát hiện các phản ứng chuyển hướng để đăng nhập trang vàimperatively
thực hiện chuyển trang.
Hoặc tôi hoàn toàn sai?
Một số refs:
JWT (JSON Web Token) automatic prolongation of expiration
Which authentication strategy should I use for my API?
Implicit & Explicit authentication
ADD 1:
Dường như trình duyệt sẽ xử lý 302 redire ction minh bạch. Vì vậy, có lẽ tôi chỉ có thể trả lại chuyển hướng 302 đến trang đăng nhập, có thể là cuộc gọi ajax hoặc truy cập trang đơn giản. Tôi sẽ cố gắng và trả lời sau.
Từ here:
Nếu câu trả lời là một chuyển hướng HTTP (mã trạng thái 301, 302, 303 hoặc 307), sau đó nó phải được tuân thủ một cách minh bạch (trừ khi nó vi phạm an ninh hoặc biện pháp phòng ngừa vòng lặp vô hạn) . Bất kỳ lỗi nào khác (bao gồm 401) PHẢI khiến đối tượng sử dụng trang lỗi đó làm phản hồi.
Catching 302 FOUND in JavaScript
How to manage a redirect request after a jQuery Ajax call
hmm, tôi không biết điều này cho đến bây giờ. Dường như có một "quy ước HTTP" để làm theo. Cảm ơn nhiều! – smwikipedia
BTW, đây không phải là để nói rằng một API web không bao giờ nên trả lại một phản ứng 302. Nếu tài nguyên thực sự di chuyển, thì hoàn toàn tốt để trả lại 301 hoặc 302. Nhưng nó không nên được sử dụng để triển khai cơ chế xác thực cho API web IMO. – MvdD
Có. * Biểu mẫu theo chức năng *. – smwikipedia