web-dev-qa-db-ja.com

電子メールをアクティブ化するためのURLとしてのJSON Web Token(JWT)

電子メールのアクティベーションURLとしてJWTを作成するのはどの程度安全ですか?

たとえば:アカウントを有効にするには、リンクをクリックしてください http://127.0.0.1:8000/account/activate/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.yRQYnWzskCZUxPwaQupWkiUzKELZ49eM7oWxAQK_ZXw

15
momokjaaaaa

リンクするFAQ は言う:

URL内のJWTトークンの使用例は次のとおりです。

これらはどちらも、1回限りのトークン(クリックすると有効期限が切れます)に適しています。

あ、はい。各メールが一度だけアクティブ化できることを確認してください(例のひどい「秘密」鍵を使用しないでください。署名が偽造される可能性がある場合、検証をバイパスできます)。

12
Thilo

JWTのようなステートレストークンの使用は、トークンに署名するために使用するシークレットとそれを検証する方法が安全である限り安全です。ただし、パスワードリセットURIでauth-tokenとしてJWTを使用する前に考慮すべき特定の追加の側面があります...

特定のJWTを無効化することはできず(状態を再度保持せずに)、有効期限が十分ではない(この特定の場合)ので、基本的に必要なのは、JWTであり、ワンタイムまたはシングルUse-Token。その理由は、単一のpassword-reset-linkを1回以上使用してパスワードをリセットしたくない場合があるためです。これにより、潜在的に攻撃者はユーザーを完全にロックアウトできます(継続的にパスワードを変更することにより)。

これがどのように機能するかをここで説明しました: JWTを使用したシングルユーストークン -基本的に、サーバー側にある状態(たとえば、ユーザーのハッシュ)を変更する必要がありますパスワード)をHMACキーに入力し、それを使用してユーザー固有のトークンに署名します。これは、パスワードが変更された後のトークン検証の失敗につながります...

4
jbspeakr