我在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 回答
我找到了一个在Angular中访问Bearer令牌的解决方案:
domain.com
将是您的Adal.JS init:adalAuthenticationServiceProvider.init(...)
中Endpoints
下定义的资源 .您可以定义 endpoints 列表并使用拦截器调用 .