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