我正在开发一个单页面,在客户端使用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