Zajmuję się tworzeniem pojedynczej strony z Javascriptem + AngularJS po stronie klienta i Spring MVC + Spring Security OAuth2 po stronie serwera. Spring MVC działa jako kontroler REST dla dowolnych żądań AJAX ze strony.Pobieranie plików w języku JavaScript za pomocą OAuth2
W celu autoryzacji skrypt wysyła nagłówki "Authorization: Bearer ..." z każdym żądaniem AJAX. Działa to dobrze, gdy żądasz niewielkich ilości danych. Aby pobrać pliki XML (eksport danych użytkownika) ja je pobrać za pośrednictwem AJAX, stosując nagłówki OAuth2 i stworzyć blob pozwala na zapisanie pliku w przeglądarce:
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();
Podejście to działa, ale
- wykorzystuje RAM i tak nie nadaje się do dużych pobierania plików
- nie wykazuje właściwą pasek postępu/Ładowanie
więc pytanie brzmi: czy istnieje zakład sposób pobierania plików z autoryzacją OAuth2? JavaScript nie pozwala na określenie nagłówków podczas wykonywania przekierowań, a OAuth nie pozwala na określenie tokena autoryzacji za pomocą parametrów URL. Mam na myśli zarówno
- dodanie specjalnej metody kontrolera Wiosna MVC dostarczenie URL, który przekierowuje z tokena URL zakodowany do nagłówka żądania HTTP kodowane
- dodając dodatkowy filtr do wiosny zabezpieczeń umożliwia wyodrębnianie token z URL Parametry
- przeprowadzce do zezwolenia oparciu o pliki cookie zamiast OAuth2
Jeśli ktoś miał podobne problemy, czy mógłbyś podzielić się podejście do tego problemu?
miło znać tę funkcję. Jedno pytanie, co masz na myśli, mówiąc, że "opcja wylogowania powinna być właściwie wdrożona"? – dacuna
Adres URL będzie przechowywany w historii przeglądarki wraz z tokenem. Każdy, kto ma dostęp do historii przeglądarki, będzie mógł znaleźć adres URL i wyodrębnić wartość access_token. Tak więc w przypadku, gdy użytkownik loguje się z publicznego komputera, musi być w stanie się wylogować (zniszczyć/zapomnieć hasło access_token po stronie serwera), w przeciwnym razie każdy będzie mógł korzystać ze swojego access_token, dopóki nie wygaśnie.Wiosna nie oferuje funkcji "wylogowania", więc jeśli tokeny nie są krótkotrwałe, należy wprowadzić funkcję, która usunie to hasło dostępu po stronie serwera. –
Aaam ok, dzięki za komentarz! – dacuna