Vue/SpringBoot: JSESSIONID が変化し続けるのはなぜですか
P粉163951336
2023-08-29 19:12:16
<p>Spring Boot 3.0.1 バックエンドを備えた vue アプリケーションがあり、CSRF を使用したいと考えています。 Vue フロントエンドと Spring Boot バックエンドは、異なるシステムによって提供されます。 CORS トピックを軽減するために nginx リバース プロキシを使用する予定ですが、この問題は nginx が関係しているかどうかに関係なく発生します。 </p>
<p>私の vue アプリケーションが最初に行うことは、csrf トークンをリクエストし、ユーザー セッション中に使用できるようにグローバルに保存することです。 </p>
<p>ユーザーがログインすると、いくつかの pinia ストアが初期化されます。しかし、残念ながら、これらのリクエスト中に、各リクエストで送信された JSESSIONID Cookie がバックエンドによって無視され、新しい JSESSIONID が発行されます。 JSESSIONID は、アプリケーションの使用中およびさらなる GET リクエストの実行中に変化し続けます</p>
<p>これにより、初期 JSESSIONID の「グローバル」に保存された CSRF トークンが無効になります...</p>
<p>「csrf」リクエストヘッダー: </p>
<p>「ログイン」タイトル: </p>
<p>その後、リクエストで JSESSIONID Cookie を送信したにもかかわらず (サーバーによって送信された - なぜですか?</p>)、5 番目のリクエストで突然新しい JSESSIONID が取得されました。
<h2>質問</h2>
<p>セッションが変化し続けるのはなぜですか? JSESSIONID は常に同じにすべきではないでしょうか? </p>
<p>CSRF を実施する目的は何ですか? (GET 以外の) リクエストを行う前に、新しいトークンをリクエストしますか? (私の場合は「認証情報: "同じオリジン"」を使用しています)</p>
SecurityConfig に
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
があり、問題が発生しています... 私の知る限り、これを削除すると CSRF の使用問題が解決します。 p>