MITM(Man-in-the-MiddleAttack)に関するセクションでは、「ワンタイム(シングルユース)トークンを使用する(リンクがクリックされた後に期限切れになる)」がMITMのソリューションであると述べています。
私の質問は、トークンを1回だけ使用すると、リクエストが送信されるたびにユーザーが再度ログインする必要があるということです。一方、サーバーがトークンを破棄して新しいトークンを返すと、新しいトークンが返されます。それでも仲介者によって傍受される可能性があります。
私が間違っている場合は、私に知らせてください、ありがとう!
@ NE-SmallTown良い質問。
シングルユーストークンを使用することは、アプリケーションのセキュリティにとって良い習慣です。
このパターンを使用する場合は、応答ごとにJWTを自動的に更新するonPreResponse
フックを設定できます。
あなたが答えなければならない質問は、トークンが再利用されないようにすることをどのように計画していますか?
識別子をある種のデータベースに保存し(_通常、アプリではこれにredis
を使用します_)、トークンがすでに使用されているかどうかを確認する必要があります。
@nelsonic返信ありがとうございます。少し混乱しています。
質問があります。
あなたが言うように、プロセスは次のとおりです。
ユーザーがホームページにアクセスし、ヘッダーでトークンを送信します(ログインしていることを前提とします)
|
|
↓
サーバーはトークンを受け取り、トークンをデコードしてuserId
取得し、データベースに移動して( redis
ではなくデータベースを使用すると仮定)、 userId
対応するトークンを取得します。 ==
演算子を使用して、それらが等しいかどうかを確認します。等しい場合は、トークンを破棄して新しいトークンを生成し、データベースにプッシュして、それとデータをクライアントに応答します。
質問があります。チェックには==
演算子を使用しますがいるので、使用しません。例:
JWT.require(Algorithm.RSA256((RSAKey) publicKey))
.withIssuer("auth")
.withSubject("ne-smalltown")
.withAudience(userId)
.withArrayClaim("jwt-role", userRole)
.build()
私が間違っている場合、トークン自体を使用する方法と場所を教えていただけますか?上記のようなメカニズムを検証しますか?
IMO、トークン自体のvertifyメカニズムを使用できる唯一の場所は、古いトークンのexpパラメーターを取得して新しいトークンに配置し、トークンが古くなっているかどうかを確認してユーザーを再ログインさせることです。
|
|
↓
クライアントは新しいトークンを受け取り、それをlocalstorage
にプッシュして古いトークンを置き換えます。次のリクエストでは、それを使用します。
@nelsonicこんにちは?
@nelsonic投稿を共有していただきありがとうございます。
投稿によると:
理論的には、これはパスワードリセットトークン以外のユースケース(電子メールのアクティブ化、アカウントの確認など)でも機能します。
私はこれらのケースがシングルユースjwtに適していることに同意しますが、私のケースはjwtにユーザーロール情報が含まれ、ロールが一定であり、パスワードのリセット、電子メールのアクティブ化、アカウントの確認などが好きではありません。
質問に戻りますが、私の場合、トークンを垂直化する必要はないと思います。データベースのトークンで==演算子を使用するだけです。
最も参考になるコメント
@ NE-SmallTownすぐに返信しなかったことをお詫びします。
JWT仕様には、1回限りの無効化に関するクレーム/メカニズムがありません。
参照: http :
@jbspeakrには、
参照: https :