Tôi đang phát triển một trang đơn với Javascript + AngularJS ở phía máy khách và Spring MVC + Spring Security OAuth2 ở phía máy chủ. Spring MVC hoạt động như một bộ điều khiển REST cho bất kỳ yêu cầu AJAX nào từ trang.Tải xuống tệp bằng Javascript với OAuth2
Để ủy quyền, tập lệnh gửi tiêu đề "Cấp quyền: Bearer ..." với mỗi yêu cầu AJAX. Điều này hoạt động tốt khi yêu cầu một lượng nhỏ dữ liệu. Để tải file XML (xuất khẩu dữ liệu người dùng) Tôi tải chúng qua AJAX, sử dụng các tiêu đề OAuth2 và tạo ra một Blob để cho phép lưu tập tin trong trình duyệt:
var blob = new Blob([data.data], {'type': "text/xml"});
var a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = "downloaded-file-" + new Date().toISOString() + ".xml";
a.click();
Cách tiếp cận này hoạt động nhưng
- sử dụng RAM và như vậy là không phù hợp cho tải tập tin lớn
- không hiển thị một thanh tiến trình thích hợp/tải
vì vậy, câu hỏi là: có một đặt cược ter cách tải xuống tệp có ủy quyền OAuth2? Javascript không cho phép chỉ định tiêu đề khi thực hiện chuyển hướng và OAuth không cho phép chỉ định mã thông báo ủy quyền thông qua tham số URL. Tôi đang nghĩ đến việc một trong hai
- thêm một Spring MVC phương pháp điều khiển đặc biệt để cung cấp một URL mà chuyển hướng từ một thẻ URL mã hóa với một yêu cầu HTTP header-mã hóa
- bổ sung thêm một bộ lọc Xuân An để cho phép giải nén token từ URL thông số
- chuyển sang uỷ quyền dựa trên cookie thay vì OAuth2
Nếu ai đã có vấn đề tương tự, bạn có thể vui lòng chia sẻ cách tiếp cận của bạn cho vấn đề này?
rất hay để biết tính năng này. Một câu hỏi, bạn có ý nghĩa gì với "tùy chọn đăng xuất phải được triển khai đúng"? – dacuna
URL sẽ được lưu giữ trong lịch sử của trình duyệt cùng với mã thông báo. Bất kỳ ai có quyền truy cập vào lịch sử của trình duyệt sẽ có thể tìm thấy URL và trích xuất giá trị access_token. Vì vậy, trong trường hợp người dùng đăng nhập từ một máy tính công cộng, anh ta cần có khả năng đăng xuất (phá hủy/quên access_token ở phía máy chủ), nếu không ai cũng có thể sử dụng access_token của mình cho đến khi nó hết hạn.Spring không cung cấp tính năng "đăng xuất", vì vậy trừ khi mã thông báo tồn tại trong thời gian ngắn, một tính năng cần được triển khai để xóa access_token ở phía máy chủ. –
Aaam ok, cảm ơn vì bình luận của bạn! – dacuna