【问题标题】:Authorization for window.location.href call in angular jsangular js中window.location.href调用的授权
【发布时间】:2016-02-07 19:53:44
【问题描述】:

我正在开发一个 Web 应用程序。我有两个单独的 UI 和 API 项目。 API 需要身份验证才能访问。我编写了一个通用代码来为每个 api 调用传递令牌。

    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'。但我得到了未经授权的异常。现在我想知道是否有办法在请求中传递我的令牌。除了使用 window.location 之外,还有其他方法可以访问我的文件下载 url(我更喜欢使用 window.location,但此时我迫切希望它能够以某种方式工作)。

【问题讨论】:

  • 我并不是说我遇到了异常。我的意思是我无法访问 api,我得到“此请求的授权已被拒绝。”作为响应。
  • 感谢您澄清这一点。你能分享来自浏览器Network面板的请求和相应的响应吗?这将有助于提供有关未经授权请求的原因的一些背景信息。

标签: javascript angularjs window.location


【解决方案1】:

一种简单的方法是在 url 中传递令牌:/pdfuri?token=token

我们在上一个项目中实现这一点的方法是调用 pdf API(使用 ajax),它返回一个临时 url,您可以在其中下载您的 pdf。

【讨论】:

  • 从 url 传递令牌仍然会导致未经授权的响应。是的,我可以返回一个不需要令牌的 url 并将 window.location 设置为此,但我想知道除了公开不安全的 api 之外是否还有其他选项。
  • 当然,如果您在查询字符串中发送令牌,您还应该更改后端,因为您不会找到任何标题。第二种选择同样不安全:您将发送一个 10 分钟后过期的 url,该 url 包含在哈希中。我在家庭银行中使用了这种方法,所以我想它足够安全......
猜你喜欢
  • 2017-12-08
  • 2018-05-20
  • 2013-08-18
  • 2016-12-23
  • 1970-01-01
  • 2020-01-10
  • 2015-07-14
  • 1970-01-01
  • 2018-09-22
相关资源
最近更新 更多