2

現在、サーバーでユーザーを認証するために json Web トークンを使用しています。ここで、ユーザーが常にアクティブなログインを 1 つだけ持つようにしたいと考えています。このようなstackoverflowに関する他の回答で述べたようにこれは、生成された json Web トークンをデータベース テーブルに保存し、ユーザーがサーバーにログインするたびにこのトークンを更新することで簡単に実行できます。ユーザーを認証するときはいつでも、データベース内のトークンをチェックするだけです。別のアプローチを考えていました。json Web トークンを使用しているため、トークン全体を保存するのではなく、ユーザーごとに異なるシークレットを使用してデータベースに保存できます。これらのシークレットは、ユーザーがログインするたびに更新されます。そのため、常に 1 つのシークレットしか存在せず、任意のシークレットを持つユーザーに対して 1 つのトークンしかデコードできないため (この場合はもちろん)、1 つのログインのみがアクティブになります。これら2つのアプローチのどちらが優れているかを知りたいです。ユーザーごとに異なるシークレットを使用しても問題ありませんか?

4

1 に答える 1

1

そのために JWT を DB に格納する必要はありません。ログイン時に一意の時間ベースの値 (UUID またはユーザー ログイン タイム スタンプ) を JWT に挿入し、その値をユーザーに対して DB に保存するだけです。ユーザーを認証するときはいつでも、その値がDBの値と等しいことを確認してください。それらが一致する場合、つまりアカウントが他のデバイスからログに記録されていないことを意味し、続行できます。そうでない場合は、適切なエラー メッセージをユーザーに送信します。

于 2016-11-03T06:44:48.150 に答える