【问题标题】:Adding http headers to window.location.href in Angular app在 Angular 应用程序中将 http 标头添加到 window.location.href
【发布时间】:2014-07-30 13:37:08
【问题描述】:

我有一个 Angular 应用程序,我需要将它重定向到一个非 Angular html 页面,所以我想我可以使用 $window.location.href 将 Angular 应用程序重定向到我的外部站点。这实际上工作正常,但是,我有一个 nodejs/express 后端,它在提供任何内容(甚至是静态内容)之前检查身份验证令牌。

这需要在 http 请求的标头中发送身份验证令牌。现在的问题:

您可以/如何在发送前通过更改$window.location.href 向请求添加身份验证令牌?

【问题讨论】:

    标签: angularjs http oauth-2.0 http-headers window.location


    【解决方案1】:

    当您使用$window.location.href 时,浏览器发出的是 HTTP 请求,而不是您的 JavaScript 代码。因此,您不能使用您的令牌值添加像 Authorization 这样的自定义标头。

    您可以通过 JavaScript 添加一个 cookie 并将您的身份验证令牌放在那里。 cookie 将自动从浏览器发送。但是,您将需要查看使用 cookie 与标头的安全含义。由于两者都可以通过 JavaScript 访问,因此那里没有额外的攻击媒介。除非您在新页面加载后删除 cookie,否则可能存在可用的 CSRF 漏洞利用。

    【讨论】:

    • 很好的答案,我想知道 angular-cookies 是否适用于此。无论如何感谢正确的方向。
    【解决方案2】:

    这个答案不是一个安全的方法,因为令牌暴露在 URL 中,它记录在浏览器历史记录、访问日志等中。请改用域 cookie。我会留下答案,因为它可以是一种在本地设置中进行调试的简单方法。

    我在 Laravel PHP 后端使用 JWT 作为身份验证,它通过在 URL 中输入 ?token=... 来工作。例如,在使用 AngularJS 和 satellizer 插件时,我在 URL 中添加了?token=' + $auth.getToken()

    【讨论】:

    • 将令牌作为 URL 参数嵌入是我最不想做的事情。
    • 即使在 SSL 中,嗅探器也可以读取请求的 URL,因此将令牌传递给请求是最糟糕的方式。如果您使用 SSL,则应将令牌放在标头或正文中。
    • "在 SSL 中,嗅探器可以读取请求的 URL" 这不是真的,只能检测到主机名/ip,而不是 url。
    • 这样做的两个漏洞是:(1) 令牌在 IIS 日志中 (2) 黑客驱动,例如有人在您煮咖啡时查看您的浏览器网址或从您的浏览器历史记录中抓取它
    • 出于安全原因必须避免使用此解决方案,@tony 也对此进行了解释
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2012-08-14
    • 2017-10-15
    • 2012-01-04
    相关资源
    最近更新 更多