1

我正在使用 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)只是超时。

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

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

4

1 回答 1

2

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

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

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

于 2016-12-22T09:19:05.003 回答