2017-06-03 5 views
2

私は最近、json Webトークンに関するいくつかの調査を行ってきました。私が集めたことから、その大きな強みの一つは無国籍者です。ユーザーを認証するために必要なものはすべてリクエストに付いてくるので、記事が多数あるほど、「リクエストごとにデータベースにヒットする」必要はありません。json webトークン、passport-jwtとそのベリファイ機能

しかし、私は間違っていない場合は、passport-jwtためのドキュメントはちょうどそれを、彼らはそれぞれのリクエストに応じてデータベースをヒット。つまり、パスポート認証が必要な各要求に対してです。

passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    //this is a database call 
    User.findOne({id: jwt_payload.sub}, function(err, user) { 
     if (err) { 
      return done(err, false); 
     } 
     if (user) { 
      done(null, user); 
     } else { 
      done(null, false); 
      // or you could create a new account 
     } 
    }); 
})); 

私は、そうでない場合は、この関数が呼び出されないであろうと、ユーザが401 unauthorizedを取得し、この関数が呼び出された時点で、トークンがすでにを確認されているという印象の下にありました。

なぜユーザーのデータベースをチェックするのですか?このコードはドキュメントにあるので、私はデータベースをチェックすることで同じことをしていますが、本当に必要ですか?なぜ私はちょうどこれをしてはならないのですか?

passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    //this is a database call 
    done(null, {id: jwt_payload.sub}) 
})); 

答えて

0

私はリアンドロとは一味違っています。彼が言うとき、彼は間違っています:

誰かがあなたの思考に正しい、それはJWTのautenticationのための主要なドライバですあなたAPI.`

にアクセスするために、独自のトークンを使用することができます。別のパスポートストラテジーを使用してパスワードで確認し、 JWTトークンを発行してください。 sekretによって署名されているので、変更することはできません。別のsekretで作成された他のJWTトークンは検証に失敗します。

私はちょうどpassport-jwtで問題を作成しようとしていました。this closed issueが見つかりました。そこでは、ドキュメントの問題点が指摘されています。

私はそれが簡単だけpassport-customを使用して、ちょうどクッキー自分自身を設定したとして、私はパスポート-JWT使用していません。

データベースを確認する必要がある場合があります。 api\getSuperSekretUserInfo\[userId]のようなAPI呼び出しがあった場合はrequest.user.id === params.userId(または何でも)をチェックする必要があります。同様に、api\getInvoice\231にアクセスしている場合は、id231がrequest.userのユーザーに属している請求書を確認する必要があります。

JWTの検証にのみ、すなわち、ユーザーがログオンした、トークンがあなたによって発行されたことを確認します。しかし、トークン内の情報が改ざんされていないことを確認して、データベースコールを必要とするかどうかを問わず、それ以上のチェックに使用することができます。

関連する問題