Tôi đang viết một ứng dụng web trong Angular, nơi xác thực được xử lý bởi mã thông báo JWT, nghĩa là mọi yêu cầu đều có tiêu đề "Xác thực" với tất cả thông tin cần thiết.
Điều này hoạt động tốt cho các cuộc gọi REST, nhưng tôi không hiểu mình nên xử lý các liên kết tải xuống như thế nào đối với các tệp được lưu trữ trên chương trình phụ trợ (các tệp nằm trên cùng một máy chủ nơi lưu trữ các dịch vụ web).
Tôi không thể sử dụng các <a href='...'/>
liên kết thông thường vì chúng sẽ không mang bất kỳ tiêu đề nào và quá trình xác thực sẽ không thành công. Tương tự cho các câu thần chú khác nhau củawindow.open(...)
.
Một số giải pháp tôi đã nghĩ đến:
- Tạo liên kết tải xuống tạm thời không an toàn trên máy chủ
- Chuyển thông tin xác thực dưới dạng tham số url và xử lý trường hợp theo cách thủ công
- Lấy dữ liệu thông qua XHR và lưu phía máy khách tệp.
Tất cả những điều trên đều ít đạt yêu cầu.
1 là giải pháp tôi đang sử dụng ngay bây giờ. Tôi không thích nó vì hai lý do: thứ nhất nó không phải là bảo mật lý tưởng, thứ hai nó hoạt động nhưng nó đòi hỏi khá nhiều công việc, đặc biệt là trên máy chủ: để tải xuống thứ gì đó, tôi cần gọi một dịch vụ tạo mới "ngẫu nhiên "url, lưu trữ nó ở đâu đó (có thể trên DB) trong một thời gian và trả lại cho máy khách. Máy khách lấy url và sử dụng window.open hoặc tương tự với nó. Khi được yêu cầu, url mới sẽ kiểm tra xem nó có còn hợp lệ không và sau đó trả lại dữ liệu.
2 dường như ít nhất là nhiều công việc.
3 dường như rất nhiều công việc, ngay cả khi sử dụng các thư viện có sẵn và rất nhiều vấn đề tiềm ẩn. (Tôi cần cung cấp thanh trạng thái tải xuống của riêng mình, tải toàn bộ tệp vào bộ nhớ và sau đó yêu cầu người dùng lưu tệp cục bộ).
Tuy nhiên, nhiệm vụ có vẻ khá cơ bản, vì vậy tôi đang tự hỏi liệu có điều gì đơn giản hơn nhiều mà tôi có thể sử dụng không.
Tôi không nhất thiết phải tìm kiếm một giải pháp "theo cách Angular". Javascript thông thường sẽ ổn.