2016-02-07 131 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分钟,并且包含一个散列,我在家庭银行中使用了这种方法,所以我认为它足够安全。 –