【问题标题】:Keep refreshing JsonWebToken by any action form user任何操作表单用户不断刷新 JsonWebToken
【发布时间】:2020-11-12 11:24:00
【问题描述】:

我使用 JsonWebtoken 在我的 web 应用程序中使用 express 在节点 js 中创建访问令牌以进行身份​​验证。

我想为这个令牌定义一个到期日期,但我不知道它如何通过用户执行一些活动来刷新“iat”!基本上,如果用户在上次活动后的 30 分钟内执行某些活动,我希望到期日期重新开始!

jwt.sign({ _userName: userName, _name: name + ' ' + sureName, _role: role.name }, config.get('jwtPrivateKey'),);

这就是我创建令牌的方式。 所以问题是如果用户在 30 分钟内有活动,我如何刷新令牌并发送一个新令牌,以便我们可以确保用户不需要在 30 分钟内登录并且令牌将是有效的?!然后如果用户超过 30 分钟没有执行任何任务,我希望令牌过期!

【问题讨论】:

    标签: javascript node.js authentication jwt json-web-signature


    【解决方案1】:

    刷新访问令牌的标准方法是创建一个单独的令牌,即“刷新令牌”(字面意思)。这是一篇帮助您入门的博文,blog post

    基本思想是将两个令牌都发送给客户端。访问令牌在 X 时间内过期,而刷新令牌在更长的时间内过期。一旦客户端从服务器收到错误(未经身份验证),它就会向服务器发送另一个请求,请求新的访问令牌。它在发出此请求时传递刷新令牌。服务器检查刷新令牌是否有效,如果有效,它将向客户端返回一个新的刷新/访问令牌对。重要的是刷新令牌只能用于获取新的访问令牌,而访问令牌用于从服务器检索数据。

    【讨论】:

    • 您能看看我在第二个答案中提供的解决方案吗?如果您认为它有问题,请告诉我
    【解决方案2】:

    我使用它来修复它,以便我可以在需要时生成一个新的

    app.use(function (message, req, res, next) {
        try {
            if (typeof message === 'string') {
                let userName = req.body._userName;
                let name = req.body._name;
                let role = req.body._role;
                let token = generateToken(userName, name, role);
                res.header('z-auth-token', token).status(200).send(message);
            } else {
                next(message);
            }
        } catch (e) {
            next(e);
        }
        
    });
    

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 2022-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多