【问题标题】:Json Web Token security [ Node JS ]Json Web 令牌安全 [Node JS]
【发布时间】:2020-11-13 16:26:09
【问题描述】:

这篇文章只是想知道我的方法/代码是否没有引入任何开销并且在安全性方面是否足够Technology used: NodeJS, JWT, ExpressJS, mongoose(mongoDB)

以下是用户模式:

const userSchema = mongoose.Schema({
email: {
    type: String,
    required: true
},
password: {
    type: String,
    required: true
},
accessToken: {
    type: String
}
});

现在我的代码实现了以下内容:

  • 每次用户登录他的帐户时,生成的访问令牌(JWT)都会保存到用户帐户(在数据库中)。每当请求需要身份验证时,例如:GET /api/user/myprofile JWT 在 Authorization 标头中与此请求一起发送,并使用已保存在数据库中的令牌进行检查(正如我之前提到的),因此没有其他人访问旧的有效 JWT 可以访问用户帐户。除此之外,经过身份验证的路由还有一个中间件功能,可以验证 JWT,这是必不可少的。

  • 同样的检查也对/logout 端点进行。如果 Authorization 标头中的令牌(JWT)与用户数据库中的令牌不同,则会引发 403 错误,因此具有有效令牌的攻击者无法连续注销用户。

就令牌管理而言,这足以提供安全性吗?有什么我遗漏的强制性内容吗?

谢谢。

【问题讨论】:

    标签: node.js express security mongoose jwt


    【解决方案1】:

    我相信您的应用程序...有一点改进的潜力。看:

    1. 您不应该将 JWT 令牌存储在数据库中。如果您可以信任该令牌,您应该验证 JWT 令牌的签名。
    2. 通过将所有令牌存储在数据库中,您会遇到单点故障。一旦你的数据库被黑,每个人都会被黑。
    3. 注销端点不应该需要身份验证或令牌。您是否希望将带有无效令牌的用户重定向到登录页面,以便他可以注销?

    请阅读如何使用 JWT 令牌:https://jwt.io/introduction/

    完成后,看看关于 JWT 令牌最常见的安全问题是什么:https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2016-06-09
      • 2015-09-19
      • 2017-10-28
      • 2019-12-19
      • 2019-10-15
      • 2018-09-05
      • 2017-09-15
      • 1970-01-01
      相关资源
      最近更新 更多