Я пишу веб-приложение на Angular, где аутентификация обрабатывается токеном JWT, что означает, что каждый запрос имеет заголовок «Authentication» со всей необходимой информацией.
Это хорошо работает для вызовов REST, но я не понимаю, как мне обрабатывать ссылки для загрузки файлов, размещенных на бэкэнде (файлы находятся на том же сервере, где размещены веб-службы).
Я не могу использовать обычные <a href='...'/>
ссылки, так как они не будут содержать заголовков и аутентификация не удастся. То же самое для различных заклинаний window.open(...)
.
Некоторые решения, о которых я подумал:
- Создать временную незащищенную ссылку для скачивания на сервере
- Передайте информацию для аутентификации в качестве параметра URL-адреса и обработайте случай вручную.
- Получите данные через XHR и сохраните файл на стороне клиента.
Все вышеперечисленное менее чем удовлетворительно.
1 - это решение, которое я использую прямо сейчас. Мне это не нравится по двум причинам: во-первых, он не идеален с точки зрения безопасности, во-вторых, он работает, но требует довольно много работы, особенно на сервере: чтобы загрузить что-то, мне нужно вызвать службу, которая генерирует новый случайный "url, хранит его где-то (возможно, в БД) в течение некоторого времени и возвращает клиенту. Клиент получает URL-адрес и использует с ним window.open или аналогичный. По запросу новый URL-адрес должен проверить, действителен ли он, а затем вернуть данные.
2 вроде как минимум столько же работы.
3 кажется много работы, даже с использованием доступных библиотек, и много потенциальных проблем. (Мне нужно было бы предоставить свою собственную строку состояния загрузки, загрузить весь файл в память, а затем попросить пользователя сохранить файл локально).
Однако задача кажется довольно простой, поэтому мне интересно, есть ли что-нибудь более простое, что я могу использовать.
Я не обязательно ищу решение "углового" пути. Обычный Javascript подойдет.