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())
来发出错误发生的信号.
您没有包括您的实际实施,因此无法确定这就是原因,但是,它似乎是一个不错的选择。
我正在使用 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())
来发出错误发生的信号.
您没有包括您的实际实施,因此无法确定这就是原因,但是,它似乎是一个不错的选择。