首页 文章

从Angular中的Adal访问承载令牌以进行身份验证下载

提问于
浏览
1

我在Angular.JS SPA中使用Adal.JS时遇到问题:在用户进行身份验证(正常的AAD重定向流)之后,Bearer Token会像应该的那样被添加到Authorization-Header .

现在是棘手的部分:在某些情况下,我需要从服务器下载一个只能访问授权用户的文件 . 不幸的是,我还没有适合该方案的解决方案 . 当我使用 $window.open('domain.com/api/getSecretFile?id=1'); 在新窗口中触发文件下载(以保持角度实例处于活动状态)时,浏览器不会将Bearer-Token添加到Authorization-Header(因为它超出了角度) - >服务器将拒绝未经授权的电话 - 这是100%合乎逻辑的 . 那么我该如何解决这个问题呢?

我的想法:将窗口打开调用更改为 $window.open('domain.com/api/getSecretFile?id=1&token=mybearertoken'); 之类的内容,以便API可以某种方式检查此附加参数 . 因此,我需要获得Angular中某处可用的Bearer Token . 但是哪里?我怎样才能访问Bearer Token?有任何想法吗?

在我的例子中,服务器端部分由ASP.Net实现 . 对于这部分,有一个解决方案:.NET Web API 2 OWIN Bearer Token Authentication direct call

但首先我需要访问令牌 . 或者也许有一种不同的正确方法来解决问题?提前致谢!

2 回答

  • 4

    我找到了一个在Angular中访问Bearer令牌的解决方案:

    app.controller('someController', ['adalAuthenticationService', function (adalAuthenticationService) {
    
      var resource = adalAuthenticationService.getResourceForEndpoint('domain.com/');
      var tokenStored = adalAuthenticationService.getCachedToken(resource);
      alert(tokenStored);
    }]);
    

    domain.com 将是您的Adal.JS init: adalAuthenticationServiceProvider.init(...)Endpoints 下定义的资源 .

  • 0

    您可以定义 endpoints 列表并使用拦截器调用 .

相关问题