web-dev-qa-db-ja.com

メール/ユーザー名ではなく、JWTでユーザーのIDを使用しても問題ないのはなぜですか?

ユーザーのIDをJWTに保持することは悪い習慣かどうか疑問に思っています。

subの電子メールは既に使用可能であり、それらを使用してそれらを識別することができるので、すべて同じように使用する予定です。 DBにインデックスを作成させることで、IDではなく電子メールを使用して情報を簡単に取得できるようになります。

IDのように、DBがそれらをどのように参照しているかに関する情報をユーザーに提供しないようにした方がいいのではないですか。私の懸念は、DBに格納されたIDをJWTで使用することに誰もがうまくいっている理由がわからないことです。簡単に回避できるからです。彼らに彼らのDBに保存されたIDを与えるのが良い考えではないシナリオはありませんか?あいまいな情報、またはユーザーが自分自身についてすでに入手可能な情報が多ければ多いほど、より良いでしょう?

2
yaharga

次のシナリオを想定します

  1. ユーザーが3つの異なるデバイスからアプリケーションにログインします。
  2. 各デバイスは、ログインを覚えるためにseparate JWTを取得します。有効期限の日付と時刻は異なります。
  3. そのユーザーはデバイス1からユーザー名やメールアドレスを変更します。

問題は、ステップ3のアクションがユーザーをデバイス2および3から自動的にログアウトすることは許容できるかということです。

それが受け入れられない場合、JWTが存在しないことを参照しているため無効と宣言されるシナリオがあるため、JWTでユーザーを識別するためにユーザー名やメールアドレスなどのキーを使用することはできません。ユーザー。

代理キー(通常はデータベースのIDフィールド)は不変であることが意図されているため、デバイス1でのユーザーアクションが他のデバイスのJWTトークンの有効性に(意図せずに)影響を与える可能性はありません。


JWTトークンで内部データを使用すると、内部データベース構造に関する情報が開示される可能性がありますが、実際の問題とは考えていません。攻撃者は、JWTトークンの署名やリソースの適切なサーバー側アクセスチェックなどの他のセキュリティ対策のため、その知識を悪用することはできません。