質問

私はどうやって私を覚えているのか興味があり、それは春のセキュリティでどのように機能しますか?

サーバーがクライアントに長寿命のCookieを送信することを理解しています。そして、クライアントはCookieを送り返し、サーバーはクライアントを認識することができます。 cookie --> session.

サーバー[Tomcat]が再起動された後、サーバー[サーバー側アプリケーション]がCookieごとにクライアントをどのように認識しているのかわかりません。

Spring Securityはどのように、どこで保存しますか cookie-session サーバーのシャットダウンの前にマップしますか?それはサーバー固有ですか(つまり、Tomcat、Jettyなどで何か違うことが起こります)?

PSスプリングセキュリティと再配置に関するもう1つの関連する問題:たとえ私がチェックしていなくても RememberMe ログイン、私はまだ約3分間再配置後に認識されています。修正できますか?

役に立ちましたか?

解決

Spring Security Docが議論します これが実際にどのように機能するか。

このアプローチでは、ハッシュを使用して、有用な記憶戦略を実現します。本質的に、インタラクティブ認証が成功すると、Cookieがブラウザに送信され、Cookieは次のように構成されています。

base64(username + ":" + expirationTime + ":" + md5Hex(username + ":" + expirationTime + ":" password + ":" + key))

...

そのため、remember-meトークンは指定された期間のみ有効であり、ユーザー名、パスワード、キーが変更されないことを条件としています。特に、これには潜在的なセキュリティの問題があります。これは、キャプチャされた記憶のトークンが、トークンが期限切れになるまで、あらゆるユーザーエージェントから使用できるということです。これは、ダイジェスト認証と同じ問題です。

基本的に、Cookieにはユーザー名、パスワード、有効期限、キー(指定)が含まれています。 ハッシュ 一緒。ブラウザがこのCookieのコンテンツをサーバーに送信する場合、Spring Security:

  1. 指定されたユーザー名のバックエンドからパスワードを取得する
  2. 計算します md5Hex() データベースからのユーザー名/パスワードなどのものとそれをCookieの値と比較する
  3. 彼らが一致している場合 - あなたはログインされています!一致していない場合は、Forged Cookieを提供するか、ユーザー名/パスワード/キーの1つが変更されました。

ここでの根本的な仮定は、ハッシュ関数 - md5Hex() 上記の部分 - 一方向にいくつかのデータを簡単にエンコードする方法を提供しますが、逆になるためには非常に硬く、実用的ではありません(からパスワードを回復するために md5Hex 文章)。

他のヒント

セッションのクッキーを私と覚えているクッキーを混同しないでください。

セッションCookieはサーバー(Tomcatなど)から送信され、着信リクエストをセッションに関連付けるために使用されます。

Cookieは、さまざまなセッションでクライアントを認証するためにSpring Securityによって送信されます(例:元のセッションの有効期限後またはサーバーの再起動後)。

Cookie Spring Securityを覚えてユーザーを認証するには、2つの戦略が提供されます。

  • TokenBasedRememberMeServices - デフォルトで使用する、安全性が低い-Cookieにはパスワードのハッシュとその他のデータが含まれています
  • PersistentTokenBasedRememberMeServices - より安全で、データベースアクセスが必要です-Cookieはデータベースに保存されている一意の識別子を含む
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top