express-jwt:快速拒绝缺少必要的 JWT 属性

express-jwt: quickly reject JWT missing essential property

我正在使用 express-jwt 创建中间件,jwtCheckMiddleware:

function getTokenFromRequest(req) {
 ...
 throw Boom.badRequest("JWT missing")
}

async function isNotRevokedCallback(req, payload, done) {
 ...
}

const jwtCheckMiddleware = expressJwt({
  secret: ....,
  credentialsRequired: true,
  isRevoked: isNotRevokedCallback,
  getToken: getTokenFromRequest
})

在开发的某一时刻,发布的 JWT 缺少 JTI 属性。新发行的代币持有 JTI 属性.

缺少JWT的请求很快被拒绝; getTokenFromRequest 抛出错误。这很好用。

使用旧 JWT 的请求——缺少 JTI——只是超时。

在 JTI 上 isNotRevokedCallback 内部有一个空检查;当 JTI 未定义时,我抛出一个错误。会不会是 expressJwt 中间件构造函数没有正确捕获这个错误,导致超时?

isNotRevokedCallback 大致基于 https://github.com/auth0/express-jwt#revoked-tokens

根据文档,isRevoked 函数回调应该具有 function(req, payload, done) 的签名。作为 done 传递的参数又是一个带有签名 function(err, revoked) 的函数,一旦检查令牌是否被撤销就应该调用该函数。

如果有问题的 JWT 没有 jti 声明并且您需要触发错误,那么 您应该调用 done(new YourError()) 来发出错误发生的信号.

您没有包括您的实际实施,因此无法确定这就是原因,但是,它似乎是一个不错的选择。