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 の内部には null チェックがあります。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 に答える