2016-09-30 23 views
1

我們正在爲我們的應用程序使用azure Active Directory身份驗證。我已經將它包含在SPA中,並且能夠讓它登錄。我得到了一個oauth標記,並且能夠存儲它並查看它。無法讓ADAL攔截器在Angular中工作

微軟的ADAL-Angular.js提供了一個攔截器,以便可以將該令牌添加到所有$ http調用中。它應該不需要修改SPA來使用它。我似乎無法讓它工作。

我在app.js中註冊提供者並將其推送到$ httpprovider(即使ADAL-Angular)。這是代碼。

 var connectionsApp = angular.module('app', 
['ngRoute', 'ngResource', 'ngCookies', 
    'tc.views', 'tc-flightProcessing', 'tc-agent', 'ui.bootstrap', 'ui.tab.scroll', 'AdalAngular']) 
    .run(run); 
connectionsApp.config(['scrollableTabsetConfigProvider', '$httpProvider', 'adalAuthenticationServiceProvider', function(scrollableTabsetConfigProvider,$httpProvider, adalAuthenticationServiceProvider){ 
    scrollableTabsetConfigProvider.setShowTooltips (true); 
    scrollableTabsetConfigProvider.setTooltipLeftPlacement('bottom'); 
    scrollableTabsetConfigProvider.setTooltipRightPlacement('left'); 
    adalAuthenticationServiceProvider.init(
     { 
      tenant: 'xxxxxxxxx-9fafd38f483f', 
      clientId: 'xxx' 
     }, $httpProvider); 
    $httpProvider.interceptors.push('ProtectedResourceInterceptor'); 
}]); 

這是服務電話。

   var getDelayCodes = function() { 
       if (isPromisePending) { 
        return deferred.promise; 
       } 
       deferred = $q.defer(); 
       isPromisePending = true; 
       debugger; 
       $http({ 
        method: 'GET', 
        url: envService.endPoint + 'delaycode' 
        headers: {'Content-Type': 'application/json'} 
       }) 
       .then(function successCallback(response){ 
        result = response.data; 
        isPromisePending = false; 
        deferred.resolve(result); 
       }, 
       function errorCallback(response) { 
        isPromisePending = false; 
        deferred.reject(response.data); 
       }); 
       return deferred.promise; 

如果我手動設置頁眉它的工作原理,但我不希望有這樣做的每一項服務。這工作:

$http.defaults.headers.post.Authorization = "Bearer " + sessionStorage.getItem("adal.idtoken"); 
$http.defaults.headers.common.Authorization = "Bearer " + sessionStorage.getItem("adal.idtoken"); 

在此先感謝您的幫助。

+1

我沒有設置$ httpProvider.interceptors.push('ProtectedResourceInterceptor');'語句,所有的代碼就像https://github.com/AzureAD/azure-activedirectory-library-for- js,我配置了cors調用的端點,Adal的攔截器在我身邊工作得很好。你能再試一次嗎? –

回答

0

可能是因爲adal.js沒有將您發送請求的URL識別爲「後端請求」,所以它不會嘗試自動注入令牌。看到這裏的邏輯:https://github.com/AzureAD/azure-activedirectory-library-for-js/blob/dev/lib/adal.js#L843-L844

code sample使用相對URL,應該工作正常。

如果你不想使用adal.js的啓發,你應該能夠通過endpoints參數明確地添加你的URL:https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp-dotnet-webapi/blob/master/TodoSPA/App/Scripts/app.js#L21-L26

0

你不需要這行。

httpProvider.interceptors.push('ProtectedResourceInterceptor'); 

這已經在adal庫的init方法中被調用了。

if (httpProvider && httpProvider.interceptors) { 
         httpProvider.interceptors.push('ProtectedResourceInterceptor'); 
        } 

嘗試刪除此行並查看它是否有效。