我使用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
答案 0 :(得分:2)
根据文档,isRevoked
函数回调的签名应为function(req, payload, done)
。作为done
传递的参数又是一个带有签名function(err, revoked)
的函数,一旦检查令牌是否被撤销,就应该调用该函数。
如果相关的JWT没有jti
声明并且您需要触发错误,那么您应该调用done(new YourError())
来表示发生了错误。< / p>
你没有包含你的实际实现,所以不可能确定这是原因,但是,它确实是一个很好的候选者。