如何使 jwt-simple 中的令牌过期?

Posted

技术标签:

【中文标题】如何使 jwt-simple 中的令牌过期?【英文标题】:How to expire token in jwt-simple? 【发布时间】:2017-02-28 16:14:05 【问题描述】:

我刚刚在 nodejs 的后端实现了 jwt-simple。我想在给定时间使令牌过期。

 var jwt = require('jwt-simple');
    Schema.statics.encode = (data) => 
    return JWT.encode(data, CONSTANT.ADMIN_TOKEN_SECRET, 'HS256');
;
Schema.statics.decode = (data) => 
    return JWT.decode(data, CONSTANT.ADMIN_TOKEN_SECRET);
;

如何在 jwt-simple 中添加过期时间

【问题讨论】:

【参考方案1】:

您可以在护照策略功能中使用过期日期验证您的令牌,如下所示:

passport.use(new JwtStrategy(opts, function(jwt_payload, done)
    User.find(id: jwt_payload.id, function(err, user)
        if (err) 
            return done(err, false, message: "Incorrect Token!!");
        
        if (user) 
            if (user[0].token_expiration_date <= Date.now())
                return done(null, false, message: "Expired Token");
            else
                return done(null, user);
            
        else
            return done(null, false, message: "Incorrect Token");
        

    );
));

希望对您有所帮助。

【讨论】:

【参考方案2】:

没有默认的exp。您可以通过两种方式手动添加:

    用纯js:

    iat: Math.round(Date.now() / 1000), exp: Math.round(Date.now() / 1000 + 5 * 60 * 60)

    moment.js:

    iat: moment().unix(), exp: moment().add(5, 'hours').unix()

Source 来自原始 Github 存储库。

【讨论】:

【参考方案3】:

改用 jsonwebtoken。

https://github.com/auth0/node-jsonwebtoken

const jwt = require(`jsonwebtoken`)

const token = jwt.sign(
  data: 'foobar'
, 'secret',  expiresIn: '1h' );

【讨论】:

【参考方案4】:

您可以在调用 create 函数之前使用有效负载中的 exp 字段,例如,您可以使用 moment 来获取时间并添加您想要的任何内容。如果要检查令牌是否过期或其他类型的错误,可以使用 jwt-simple-error-identify 代替。

在他的文档中有一个例子。https://www.npmjs.com/package/jwt-simple-error-identify

【讨论】:

【参考方案5】:

更准确地说,在您的数据对象中添加exp 属性,其中exp 是unix 格式的到期时间。

例如

var data = "data":["some data"],exp:16872131302
var jwt = require('jwt-simple');
    Schema.statics.encode = (data) => 
    return JWT.encode(data, CONSTANT.ADMIN_TOKEN_SECRET, 'HS256');
;
Schema.statics.decode = (data) => 
     return JWT.decode(data, CONSTANT.ADMIN_TOKEN_SECRET);
;

【讨论】:

以上是关于如何使 jwt-simple 中的令牌过期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使节点 js 中的 jwt 过期?

如何手动使 JWT 令牌过期?

单次使用后如何使两因素身份验证令牌过期

将 JSON Web 令牌列入黑名单

当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期

如何验证nodejs中的jwt令牌/永不过期?