2016-04-26 42 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

相關問題