如何使用承载令牌身份验证访问报表在不同选项卡中打开的报表服务器?

时间:2018-01-07 04:49:36

标签: angularjs asp.net-web-api authorization asp.net-identity bearer-token

问题陈述

我正在开发一个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" };
    }

0 个答案:

没有答案