【问题标题】:Working on token authentication system and have a couple of questions about jsonwebtoken从事令牌认证系统工作,有几个关于 jsonwebtoken 的问题
【发布时间】:2020-11-01 19:50:36
【问题描述】:

我有一个解耦的 Vue.js 前端 + Node.js 后端,现在我正在尝试实现一个令牌认证系统,但我有几个问题。

jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' }, function(err, token) {
  console.log(token);
});

首先,为了生成令牌,该函数需要一个私钥/密钥。我有点困惑这个密钥应该是什么样子,以及它是否必须对所有令牌都相同,或者它应该是唯一的。另外我应该将这个密钥存储在哪里?

我的第二个问题是有效载荷应该由什么组成。在示例中,{ foo: 'bar' } 用作有效负载。在我的应用程序中,用户注册后,我将他的信息保存在数据库中,并得到一个如下所示的对象:

    let user = {
        username: 'Test1',
        password: '$2a$12$lLnLRVHiI7yI4br.ys2aj.5EVcIjRD7BkV',
        email: 'test1@gmail.com'
    }

我只是将用户对象作为负载传递给 jwt.sign() 还是应该只传递一个属性?

【问题讨论】:

  • “我正在尝试实现令牌认证系统*” - 为什么?你需要认证做什么?什么凭据将用于登录?你需要会话状态吗?
  • @Bergi 令牌认证有问题吗?我需要身份验证,因为我想到的一些功能要求应用程序具有注册用户和身份验证,以便我可以保护一些路由。电子邮件和密码将用于登录。
  • 请参阅 cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessionsdeveloper.okta.com/blog/2017/08/17/… 了解您可能不需要(或不想要)令牌的原因

标签: javascript node.js jwt


【解决方案1】:

1,您的私人令牌应该足够长,以使其更难被暴力破解。

2,所有令牌都应该相同。

3、应该安全地存储在服务器端。如果不知道您的设置,就无法回答这个问题。但是不要检入git,不要放到客户端(给大家看)。

4,请勿将机密/密码放入有效负载中。这些没有加密。您可以在不知道秘密的情况下通过jwt.io 获取任何令牌并对其进行解码。

JWT 缺少一个重要方面。在负载中,您可以验证负载是使用您的密钥创建的。但是,有效负载本身未加密

因此,您可以将想要验证的任何内容放入有效负载中。一个好的用例是 userId。如果对令牌的验证签出,您就知道它是使用密钥创建的。但秘密在于客户端,每个客户端都可以创建一个有效的令牌。因此,请确保将其实际保密并在服务器端。永远不要在令牌中放入密码或其他机密。所有人都可以 100% 看到它们。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多