【问题标题】:express-jwt-blacklist throw an error like as Error: JWT missing tokenId claimsub in my codeexpress-jwt-blacklist 抛出一个错误,例如 Error: JWT missing tokenId claimsub in my code
【发布时间】:2020-02-02 19:30:28
【问题描述】:

我正在开发 MEAN 堆栈应用程序。对于会话身份验证,我使用了 express-jwt

我的代码与 express-jwt 令牌配合得很好,但是当我注销时,我想删除 jwt 令牌/在黑名单中添加令牌。

因此,当我将 express-jwt-blacklist 与 jwt 令牌一起应用时,它会引发错误。错误:JWT missing tokenId claimsub

我的工作代码

=> In middleware / config file
const expressJWT = require("express-jwt");

CONFIG.JWTTOKENALLOWACCESS = expressJWT({
        secret: CONFIG.JWTTOKENKEY,
        userProperty: 'payload'
    });


=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);

我的不工作代码(应用 express-jwt-blacklist 后)

=> In middleware / config file
const expressJWT = require("express-jwt");
const blacklist = require('express-jwt-blacklist');

CONFIG.JWTTOKENALLOWACCESS = expressJWT({
    secret: CONFIG.JWTTOKENKEY,
    userProperty: 'payload',
    isRevoked: blacklist.isRevoked
});


=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);

错误抛出

error: "JWT missing tokenId claimsub"

请帮我解决这个问题。

【问题讨论】:

  • 您的 JSON 中似乎缺少键值对。
  • 如果 JSON 中缺少键值对,那么在应用 express-jwt-blacklist 之前它应该不起作用。但它在不应用 express-jwt-blacklist 的情况下效果很好

标签: javascript node.js express express-jwt jwt-auth


【解决方案1】:

通过在 blacklist.configure 中添加 tokenId 解决问题,如下所示

=> In middleware / config file
const expressJWT = require("express-jwt");
const blacklist = require('express-jwt-blacklist');

blacklist.configure({
    tokenId: 'jti',
    // strict: true,
    // store: {
    //     type: 'memcached',
    //     host: 'localhost',
    //     port: 3001,
    //     keyPrefix: 'mywebapp:',
    //     options: {
    //         timeout: 1000
    //     }
    // }
});

CONFIG.JWTTOKENALLOWACCESS = expressJWT({
    secret: CONFIG.JWTTOKENKEY,
    userProperty: 'payload',
    isRevoked: blacklist.isRevoked
});


=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);

确保您必须在 jwt 登录时设置 jti 参数/字段,如下所示

const randToken = require('rand-token');
const jwt = require("jsonwebtoken");

...
...
...

user.myToken = jwt.sign({
    jti : user._id + "_" + randToken.generator({ chars: '0-9' }).generate(6);
    first_name : user.first_name,
    last_name : user.last_name,
    ...
    ...
    ...
}, jwt token key, {
    expiresIn: '7d' //7 days
});

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 2014-06-27
    • 2017-01-23
    • 2017-09-22
    • 2022-12-15
    • 2017-04-19
    • 2015-12-07
    • 2016-04-04
    • 2022-09-23
    相关资源
    最近更新 更多