web-dev-qa-db-ja.com

ランダムに生成されたトークンとJSON Webトークン

Webサーバーへのアクセスを保護しようとしています。

私はランダムに秘密鍵を生成し、それをそのユーザーに関連付けるJSON Webトークン認証を実装しています。その後、秘密鍵を使用してJSON Webトークンをエンコードします。次に、ユーザーはJSON Webトークンを使用してWebサーバーにアクセスします。

この簡単な方法も考えていました。ランダムにキーを生成してユーザーをそれに関連付けない理由はありますか?それで認証しますか?

10
Big yellow duck

どちらの方法でもかまいませんが、認証をステートレスにするかどうかによって異なります。

JWTの利点:

  • ステートレス。
  • データベースのオーバーヘッドがほとんどまたはまったくない。
  • 個々のバックエンドコンポーネントは、秘密鍵を知るだけで、トークンを個別に検証できます。

短所:

  • 認証状態はクライアント側に保存されるため、サーバー側のログインを無効にすることはできません。

アプリケーションのリスク選好度にもよりますが、これはすべての認証ロジックをサーバー側に移動するのに十分大きなデメリットになる可能性があります。

2つを組み合わせて、認証済みのトークンをクライアント側で検証されたサーバー側で提供できることに注意してください(つまり、JWT内のトークンはMACによって検証され、トークン自体はデータベースに保存されます)。これは、攻撃者がMACの検証に使用される秘密鍵を知らずにセッションIDを直接使用してセッションを乗っ取ることができないため、攻撃によってセッションテーブルが公開される状況から保護します。

8
SilverlightFox