2016-02-07 80 views
2

我正在使用Web應用程序。我有兩個用於UI和API的獨立項目。 apis需要認證才能訪問。我寫了一個通用代碼來爲每個api調用傳遞令牌。window.location.href以角度js調用的授權

App.config(function ($httpProvider) { 
$httpProvider.interceptors.push('authInterceptorService');  
}); 

這是我的authInterceptorService工廠代碼。

var localStorageLocation = ngAuthSettings.localStorageLocation; 

     var authInterceptorServiceFactory = {}; 

     var _request = function (config) { 

      config.headers = config.headers || {}; 

      var authData = localStorageService.get(localStorageLocation); 
      if (authData) { 
        config.headers.Authorization = 'Bearer ' + authData.token; 
      } 
      return config; 
     } 
    authInterceptorServiceFactory.request = _request; 

現在我有一個API來下載PDF文件。我正在使用'window.location.href = uri'。但我得到未經授權的例外。現在我想知道是否有方法在請求中傳遞我的令牌。是否有任何其他方式來訪問我的文件下載URL,而不是使用window.location(我更喜歡使用window.location,但在這一點上,我迫不及待地以某種方式工作)。

+0

我不是故意說我得到一個異常。我的意思是我無法訪問api,並且我得到'''該請求的授權已被拒絕'。「作爲迴應。 – Mounika

+0

感謝您解決這個問題。您是否可以通過瀏覽器的_Network_面板分享請求和相應的響應?這將有助於提供關於未經授權請求的原因的一些上下文。 – gnerkus

回答

0

一個簡單的方法,可以通過在URL中的令牌:/ pdfuri記號=記號

我們實現了,在我的最後一個項目是調用PDF API(阿賈克斯)返回一個臨時的網址,其中的方法?你可以下載你的PDF。

+0

從url傳遞令牌仍然導致未經授權的響應。是的,我可以返回一個不需要令牌的url並將window.location設置爲此,但我想知道是否有任何其他選項暴露了不安全的api – Mounika

+0

當然,如果您在查詢字符串中發送標記,您還應該更改後端,因爲您找不到任何標頭。第二個選項並不安全:你會發送一個URL,過期時間爲10分鐘,並且包含一個散列,我在家庭銀行中使用了這種方法,所以我認爲它足夠安全。 –