express-jwt:快速拒绝JWT遗失的必要财产

时间:2016-12-22 00:39:47

标签: jwt express-jwt

我使用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

1 个答案:

答案 0 :(得分:2)

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

如果相关的JWT没有jti声明并且您需要触发错误,那么您应该调用done(new YourError())来表示发生了错误。< / p>

你没有包含你的实际实现,所以不可能确定这是原因,但是,它确实是一个很好的候选者。