2016-04-26 41 views
1

我们使用Azure AD + OpenID连接来保护我们的应用程序。客户端应用程序是在Angular中开发的,我们正在使用'angular-adal'库来与azure广告集成。所以无论何时客户端使api调用服务器,它都会在请求头中自动包含不记名令牌。 (在服务器上我们有验证令牌“护照蔚广告”节点库)如何使用带有不记名令牌的Angular下载文件

我们这是目前吹塑

控制器

$scope.getURL = function (reportId) { 
       return '/api/reports/download/' + reportId; 
    }; 

实现下载文件功能HTML

 <form method="get" action="{{getURL(row.id)}}"> 
     <button class="btn btn-link" type="submit">Download Results</button> 
    </form> 

但是它不包括be当我点击下载按钮时,在请求中的arer标记,所以服务器返回未授权错误。我如何在请求中包含令牌?最好的方法是什么?

UPDATE1
正如我们推荐的由Angular ADAL库,我们可以通过在$ routeProvider设置“requiredADLogin”属性为true固定路线。像下面一样

$routeProvider. 
     when("/todoList", { 
       controller: "todoListController", 
       templateUrl: "/App/Views/todoList.html", 
       requireADLogin: true 
     }); 

我正在使用$ stateProvider。我已经用'requiredADLogin'设置了所有其他HTML页面路由的状态,并且工作正常。如何为API路径设置$ stateProvider。我的下载网址是

'/api/reports/download/'+reportID 
+0

参见:HTTP://计算器。 com/questions/25009634/where-should-i-inject-bearer-tokens-into -http-in-angularjs作者建议编写一个拦截器,将auth令牌插入'$ http'请求中。 – Kyle

+0

@ user3862378请参阅update1 – LP13

+0

您是如何解决您的问题的?我遇到了几乎相同的问题。在我的Web API中使用ADFS身份验证下载包含ADAL.js的文件。地狱的网址基本上是一样的!谢谢 ! – Guigui

回答

0

我不熟悉Azure的广告,但我猜你需要以某种方式设置身份验证令牌这样的标题:

var req = { 
method: 'GET', 
url: '/api/reports/download/' + reportId, 
headers: { 
    'Authorization': 'Bearer ' + token 
} 
} 

$http(req).then(function(){...}, function(){...}); 
+0

请参阅update1 – LP13

相关问题