【问题标题】:express-jwt: quickly reject JWT missing essential propertyexpress-jwt:快速拒绝 JWT 缺少的基本属性
【发布时间】:2017-05-07 13:10:29
【问题描述】:

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

【问题讨论】:

    标签: jwt express-jwt


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢! done 回调是关键点。成功案例为done(null, false),失败案例为done(Boom.wrap(err)),用于isNotRevokedCallback 中捕获的错误。
    猜你喜欢
    • 2017-03-11
    • 2018-01-24
    • 2021-08-21
    • 2022-01-08
    • 2015-12-07
    • 2016-04-04
    • 1970-01-01
    • 2020-10-19
    • 2020-08-07
    相关资源
    最近更新 更多