我正在開發一個單頁面,在客戶端使用Javascript + AngularJS,在服務器端使用Spring MVC + Spring Security OAuth2。 Spring MVC充當REST控制器,用於來自頁面的任何AJAX請求。使用OAuth2在Javascript中下載文件
對於授權,腳本會爲每個AJAX請求發送一個「Authorization:Bearer ...」標頭。這在請求少量數據時工作正常。 下載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();
這種方法有效,但
- 使用RAM等不適合大文件下載
- 沒有顯示正確的進度/加載條
所以,問題是:是否有一個賭注用OAuth2授權下載文件的方式? Javascript不允許在重定向時指定標頭,而且OAuth不允許通過URL參數指定授權標記。我想任
- 加入了特殊的Spring MVC控制器的方法來提供從URL編碼的令牌重定向到一個頭編碼的HTTP請求
- 添加額外的春季安全過濾器的URL,以允許提取從URL中的令牌參數
- 轉移到基於cookie的授權的OAuth2
,而不是如果沒有人有類似的問題,請你分享你的方法解決這個問題?
很高興知道這個功能。有一個問題,你認爲「註銷選項應該正確實施」是什麼意思? – dacuna 2015-09-06 04:27:35
該URL將與令牌一起保存在瀏覽器的歷史記錄中。任何有權訪問瀏覽器歷史記錄的人都可以找到該URL並提取access_token值。因此,如果用戶從公共計算機登錄,他需要能夠註銷(銷燬/忘記服務器端的access_token),否則任何人都可以使用他的access_token,直到它過期。Spring不提供「註銷」功能,因此除非令牌短暫存在,否則需要實施一項功能來擦除服務器端的access_token。 – 2015-09-06 12:33:46
Aaam好的,謝謝你的評論! – dacuna 2015-09-06 20:05:02