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

Dee*_*pak 5 authorization asp.net-web-api angularjs asp.net-identity bearer-token

问题陈述

我正在开发一个 SPA,用户可以在其中查看/查看 pdf、文本和 html 等格式的不同报告。由于我们分别使用授权服务器和资源服务器,并且每个资源服务器都必须向授权服务器请求用户身份和然后授权服务器将提供一个承载令牌来访问资源。

现在每个请求都必须有一个带有不记名令牌的授权标头才能访问资源。

在我的情况下,SPA 正在打开新选项卡以使用直接 url 访问不同类型的报告(这是一项要求),因此在这种情况下我无法设置授权标头。

有没有标准化的方法来处理这种情况?

我尝试了三个选项来处理这个问题。

url中的#Token(不是一个好习惯)

#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);
        });
Run Code Online (Sandbox Code Playgroud)

#Set cookie(这是有效的,但我正在寻找不同的解决方案,其中仅使用不记名令牌进行授权)

这是我用于获取报告的报告控制器代码

[Authorize(User="CanView")]
    public ContentResult GetReport(string type, int id)
    {
        return new ContentResult() { Content = someByte, ContentType = "application/pdf" };
    }
Run Code Online (Sandbox Code Playgroud)