【发布时间】:2015-04-07 16:46:45
【问题描述】:
我正在开发一个单页面,在客户端使用 Javascript+AngularJS,在服务器端使用 Spring MVC + Spring Security OAuth2。 Spring MVC 充当来自页面的任何 AJAX 请求的 REST 控制器。
对于授权,脚本会随每个 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
- 添加额外的 Spring Security 过滤器以允许从 URL 参数中提取令牌
- 转向基于 cookie 的授权而不是 OAuth2
如果有人有类似的问题,您能否分享您解决此问题的方法?
【问题讨论】:
标签: oauth spring-security spring-security-oauth2