【问题标题】:Is it a secure way to handle returning user in ember?在 ember 中处理返回用户是否安全?
【发布时间】:2016-06-17 01:00:18
【问题描述】:

我正在使用 ember 为需要用户登录的网站编写 web ui。假设浏览器存储了用户上次登录的一些 cookie。现在用户再次访问该站点。那么,ember 根据上次访问的 cookie 自动登录用户是否是一种安全且通用的方式?如果是这样,实现这一点的常用方法是什么? (我在 Google 上找不到任何东西。)此外,如何在登录时创建 cookie?将用户 ID、密码哈希和过期时间放在 cookie 中是一种常见的方法吗?

此外,非常感谢与此主题相关的任何参考。

编辑 1
根据 Vohuman 的回答,我想我可以让我的问题更具体一点。基本上,我想知道的是一种常见且安全的实现方式,可以让用户保持登录状态,即使他们关闭并重新打开浏览器也是如此。即,生命周期超出了会话范围。以linkedin为例。如果您已登录并退出浏览器。然后下次你重新访问linkedin时,你仍然是自动登录的。现在,我能想到的解决方案如下。

当您首次登录网站时,服务器将返回一个包含身份验证哈希令牌的 cookie。然后下次您重新访问该站点时,服务器将收到哈希令牌,从而验证您的会话。

那么,以上流程基本上是人们通常用来保持用户登录的方式吗?如果是这样,JSON Web 令牌(JWT)基本上是构造我上面提到的哈希令牌的一种方法吗?此外,假设连接是 HTTPS,这种方法对我来说似乎是安全的。不是吗?

编辑 2
This article 就访问令牌的存储位置进行了有趣的讨论。

【问题讨论】:

    标签: javascript cookies ember.js web-applications


    【解决方案1】:

    ember 根据上次访问的 cookie 自动登录用户是一种安全且常用的方式吗?

    是和不是。安全是一个复杂的话题。通常会话 cookie 用于授权用户。这实际上是保持用户登录的最常用方法。如果用户不能保证他的凭据安全,那么任何安全层都可能容易受到攻击。

    对于单页应用程序,通常使用访问令牌而不是 cookie 和会话。客户端发送用户凭据,服务器返回访问令牌。令牌已加密且可过期,可存储在localStoragesessionStorage 中。使用JSON Web Tokens (JWT) standard 是在Web 服务中实现用户身份验证和授权的流行方法。例如,Facebook Open Graph API 使用访问令牌。

    JSON Web Token (JWT) 是一种紧凑的、URL 安全的表示方式 要求在两方之间转让。 JWT 中的声明 被编码为 JSON 对象,用作 JSON 的有效负载 Web 签名 (JWS) 结构或作为 JSON Web 的明文 加密 (JWE) 结构,使声明能够数字化 使用消息验证码进行签名或完整性保护 (MAC) 和/或加密。

    编辑:

    那么,以上流程基本上是人们通常用来保持用户登录的方式吗?

    对于传统网站,是的。

    使用访问令牌的全部意义在于保持 Web 服务/API 无状态。这意味着服务器不必存储任何 cookie/会话来验证和授权用户。无状态是实现遵循REST 范式的Web 服务的关键因素之一。客户端必须存储令牌并将其发送到服务器(通过授权标头或查询参数)。服务器不存储令牌。当然,如果您想添加另一层安全性,您可以将令牌存储在服务器上,但这并不常见且没有必要。将令牌存储在服务器上还会使您的应用程序容易受到数据库攻击,因此不建议这样做。

    如果您想让流程更安全,您可以减少访问令牌的有效期(1 小时、1 天或 1 周,由您决定)。

    localStorage 安全吗?

    localStorage 数据为每个来源(域)单独存储。恶意用户只有在他/她有权访问用户浏览器时才能读取数据。您应该确保您的应用程序没有任何 XSS 漏洞,以便恶意用户无法将任何脚本注入您的应用程序。这实际上是一个不同的话题。

    【讨论】:

    • 感谢您的回答。我根据您的回答更新了我的问题。但是,我并不完全确定您的答案。特别是,假设我想让用户在当前会话之后保持登录状态。然后我猜 sessionStorage 不会工作,对吧?至于localStorage,它安全吗?会被恶意网站挖矿吗?
    • 我刚刚发现了一篇关于将 JWT 令牌存储在 cookie 或网络存储中的有趣文章,它实际上建议使用 cookie 而不是网络存储:stormpath.com/blog/…
    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2014-01-19
    • 2015-12-18
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多