Я разрабатываю одностраничную страницу с Javascript + AngularJS на стороне клиента и Spring MVC + Spring Security OAuth2 на стороне сервера. Spring MVC действует как контроллер REST для любых запросов AJAX со страницы.Загрузка файлов в Javascript с помощью OAuth2
Для авторизации сценарий отправляет заголовки «Authorization: Bearer ...» с каждым запросом AJAX. Это прекрасно работает при запросе небольших объемов данных. Для загрузки XML-файлов (экспорт пользовательских данных) загрузить их с помощью AJAX, используя заголовки OAuth2 и создать Blob, чтобы сохранить файл в браузере:
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();
Этот подход работает, но
- Использование оперативной памяти и поэтому не подходит для больших загрузок файлов
- не показывает надлежащую прогресс/полосы загрузки
Итак, вопрос: есть ли ставка ter способ загрузки файлов с авторизацией OAuth2? Javascript не позволяет указывать заголовки при переадресации, а OAuth не позволяет указывать маркер авторизации через параметры URL. Я имею в виду либо
- добавления специального метода контроллера Spring MVC, чтобы обеспечить URL, который перенаправляет из URL-закодирован маркеру для HTTP запроса
- заголовка кодированного добавления дополнительного фильтра Spring Security для извлечения позволяет маркер из URL параметры
- перехода к печенью на основе авторизации вместо OAuth2
Если кто-нибудь были подобные проблемы, не могли бы вы поделиться своим подходом к этой проблеме?
приятно знать эту функцию. Один вопрос, что вы подразумеваете под «вариантом выхода из системы, должен быть правильно реализован»? – dacuna
URL-адрес будет храниться в истории браузера вместе с токеном. Любой, кто имеет доступ к истории браузера, сможет найти URL-адрес и извлечь значение access_token. Поэтому, если пользователь входит в систему с общедоступного компьютера, он должен иметь возможность выйти из системы (уничтожить/забыть access_token на стороне сервера), иначе любой сможет использовать его access_token до истечения срока его действия.Spring не предлагает функцию выхода из системы, поэтому, если токены недолговечны, необходимо выполнить функцию, чтобы удалить access_token со стороны сервера. –
Aaam ok, спасибо за ваш комментарий! – dacuna