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