问题陈述
我正在开发一个SPA,用户可以在其中查看/查看pdf,text和html等不同的报告。 由于我们分别使用授权服务器和资源服务器,并且每个资源服务器必须向授权服务器请求用户身份,然后授权服务器将提供承载令牌来访问资源。
现在每个请求都必须有一个带有承载令牌的授权标头才能访问资源。
在我的情况下,SPA正在打开新选项卡以使用直接URL访问不同类型的报告(这是一项要求),所以在这种情况下我无法设置授权标题。
有没有任何标准化的方法来处理这种情况?
我尝试了三个选项来处理这个问题。
#loken in url(不是一个好习惯)
#Javascript Blob(某些浏览器不支持)
var config = {
responseType:'arraybuffer',
headers: {
'Authorization': $window.sessionStorage.token
}
};
$http.get(url, config).then(function onSuccess(response) {
var contentType = response.headers("content-type");
var blob = new Blob([response.data], { type: contentType });
var fileURL = URL.createObjectURL(blob);
window.open(fileURL);
});
#Set cookies(这是有效的,但我正在寻找不同的解决方案,只有持票人才能用于授权)
以下是我获取报告的报告控制器代码
[Authorize(User="CanView")]
public ContentResult GetReport(string type, int id)
{
return new ContentResult() { Content = someByte, ContentType = "application/pdf" };
}