web-dev-qa-db-ja.com

「覚えておく」ためにJWTトークンを使用すると、ランダムセッショントークンよりも安全性が低くなりますか?

私は " https://stormpath.com/blog/token-auth-spa "と " https://paragonie.com/blog/2015/04/secure- authentication-php-with-long-term-persistence "(特に:-))と私が避けたいことは、私が考えられるすべてのセキュリティ対策を盲目的に使用することですfeelより安全です。 「念のために」ハッシュをハッシュするようなもの。

私が現在持っているもの(MEANの例の3日目)-JWTトークン(ユーザーのID)+有効期限があります。したがって、トークンは永久に存続しません。このトークンは、「記憶」機能を使用するためにCookieとして保存されます。

ここで私がバグを感じるのは、サーバーがミックスに追加するランダムデータがないため、安全で安全ではありませんが、非常に確定的な設定です(リンクした2番目の記事を参照)。

そのため、JWTトークンは「クラシック」セッショントークンよりも安全性が低いかどうか疑問に思います。そのような設定について考えています。

  • ユーザーがログインし、以前と同じようにJWTトークンが作成され、セッショントークンも作成され(id +乱数)、乱数のハッシュがDBに保存されます(有効期限はもちろん設定されています)
  • 通常の作業ではJWTトークンが使用されます(「記憶」には使用されません)
  • セッショントークンは「記憶」に使用され、Cookieとして保存されます

そして、ユーザーが戻ったとき、「remember me」がキックインし、ログインする代わりに、セッショントークン付きのCookieを使用してユーザーを認証し、成功するとJWTが作成されます。

したがって、3つの「レイヤー」があります。

  • ログイン+パスワード-時間の無限使用
  • セッショントークン(「覚えて」)-長期的な使用
  • JWTトークン-現在の作業だけのための短期的な使用法

私の質問は-唯一のJWTを使用した最初のアプローチは安全性が低いかどうかです。または言い換えれば、上記で説明したように「セッショントークン」を追加することで、この設定をより安全にしたり、混乱させたりしたのでしょうか。 :-)

7
greenoldman

JWTは、十分に強力にハッシュおよび暗号化されている場合、セッションと同じくらい安全で、オーバーヘッドが低くなります。必ず小さくしてください(数KBを超えるストレージが必要な場合は、何か問題が発生している可能性があります...)。 JWTとのセッションのベストプラクティスに従ってください。

十分に強力なアルゴリズムと強力なキーを使用している場合、ユーザーがそれを解読しようとすると、うまくいきません。また、クラックした場合、他の人のJWT Cookieを盗んでその情報(セッションに対する同じタイプの攻撃)を取得する方法も見つける必要があります。

JWTがセッションよりも安全性が低い場合、JWTはクライアント側のセッションであるため、設計が間違っています。セッションに保存するものはすべてここに保存できます。それにセッションIDを格納して、JWTには配置できないDB内のより大きなものを追跡することもできます。

7
Robert Mennell

Robertが言ったように、jwtは暗号化されていればセッションと同じくらい安全です。使用する秘密が非常にユニークであることを確認してください。

警告:非対称キーを使用する一部のjson Webトークンライブラリに脆弱性があります。

node-jsonwebtoken、pyjwt、namshi/jose、php-jwt、またはjsjwtと非対称キー(RS256、RS384、RS512、ES256、ES384、ES512)。これらは脆弱なライブラリであり、修正するには、それらの最新のアップデートがあることを確認してください。

このWebサイトは、jwtの教育とテストに非常に役立ちます。 https://jwt.io/

このスタックオーバーフローの回答は、非対称キーと対称キーについて説明しています: https://stackoverflow.com/questions/32900998/jwt-keys-asymmetric-and-symmetric

これは、MEANアプリケーションで使用するパッケージです。 "jsonwebtoken": "^ 5.7.0"、 "passport-jwt": "^ 2.0.0"

passport.jsは認証用です

7
nd510