私は " 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トークンは「クラシック」セッショントークンよりも安全性が低いかどうか疑問に思います。そのような設定について考えています。
そして、ユーザーが戻ったとき、「remember me」がキックインし、ログインする代わりに、セッショントークン付きのCookieを使用してユーザーを認証し、成功するとJWTが作成されます。
したがって、3つの「レイヤー」があります。
私の質問は-唯一のJWTを使用した最初のアプローチは安全性が低いかどうかです。または言い換えれば、上記で説明したように「セッショントークン」を追加することで、この設定をより安全にしたり、混乱させたりしたのでしょうか。 :-)
JWTは、十分に強力にハッシュおよび暗号化されている場合、セッションと同じくらい安全で、オーバーヘッドが低くなります。必ず小さくしてください(数KBを超えるストレージが必要な場合は、何か問題が発生している可能性があります...)。 JWTとのセッションのベストプラクティスに従ってください。
十分に強力なアルゴリズムと強力なキーを使用している場合、ユーザーがそれを解読しようとすると、うまくいきません。また、クラックした場合、他の人のJWT Cookieを盗んでその情報(セッションに対する同じタイプの攻撃)を取得する方法も見つける必要があります。
JWTがセッションよりも安全性が低い場合、JWTはクライアント側のセッションであるため、設計が間違っています。セッションに保存するものはすべてここに保存できます。それにセッションIDを格納して、JWTには配置できないDB内のより大きなものを追跡することもできます。
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は認証用です