2017-11-01 13 views
1

私のアプリケーションでJWTを使いたいです。 今私は自分のトークンに署名するための秘密の秘密と組み合わせてユーザーのパスワードを使用するのが安全かどうか疑問に思っています。このようにして、ユーザーがパスワードを変更した場合、トークンは無効になります。 それは私の秘密の秘密を脆弱にするかもしれませんか? あなたの考えをありがとう!ユーザーパスワードをキーとしたJWT

+0

私は手で事前にユーザーを読み込まなければならないので、検証するのが少し難しいと思う。しかし、それは実行可能でなければなりません。 –

答えて

1

普通のことは、すべてのトークンに同じ鍵で署名することです。管理を簡素化し、各要求におけるデータベースのクエリーを回避します。

キー+ユーザーパスワードで署名することは可能であり、トークンを取り消すことができるという利点があります(コメント付きの欠点があります)。

署名鍵がユーザーのパスワードから派生した十分な安全性を持ち、選択された署名アルゴリズムの長さが推奨されていることを確認します。ユーザーのパスワードを直接保管または使用しないでください。

+0

あなたの答えに感謝します。ほとんどの場合、有効なリクエストがあると仮定すると、私はいつでもデータベースのクエリを終了します。だから私は実際にそれほど欠点ではないと思いますか? –

+0

影響はアーキテクチャによって異なります。数十のクエリで重いサービスを実装する場合、追加は重要ではありません。しかし、マイクロサービスを使用すると、応答時間に影響を与える可能性があります。パスワードの変更は一般的な要求ではないが、この操作をサポートするためにすべてのサービスに不利な立場にあることにも注意してください。 – pedrofb

0

シークレットは、クライアントとサーバー間で交換される事前共有された文字列です。 だからあなたの場合:

  SecretString= PresharedSecret + ClientPassword 

ので、毎回クライアントは、JWTのトークンを渡し、あなたは、データベースからパスワードを取得したり、それをプリロードするいくつかの方法および検証するためのパスワード変更の場合はチェックを持っている必要がありますトークン

これは、次のシナリオにつながる可能性があります

  1. 毎回、クライアントが自分のパスワードを忘れてしまった、あなたはそれが誰誰として、一つの方法でセキュリティを高めるであろう
  2. 高価になることができ、データベースの呼び出しを行う必要がある場合がありますパスワードを変更すると、以前のSecretStringの知識を持つサーバーと通信できなくなります。 新しい事前共有秘密を決定し、新しい登録パスワードで検証する必要があります。

全体的に、セキュリティが強化されます。ただし、インフラストラクチャの目的や用途によって異なります。ユーザーが頻繁にパスワードを忘れるシステムであれば、これは素晴らしい選択肢ではないかもしれません。

関連する問題