シングルページアプリケーションを構築していて、偽造防止トークンの問題が発生しています。
問題が発生する理由はわかっていますが、修正方法がわかりません。
次の場合にエラーが発生します。
- ログインしていないユーザーがダイアログをロードします(生成された偽造防止トークンを使用)
- ユーザーがダイアログを閉じる
- ユーザーがログインします
- ユーザーが同じダイアログを開く
- ユーザーがダイアログでフォームを送信
偽造防止トークンはユーザー「」を対象としていますが、現在のユーザーは「ユーザー名」です
これが発生する理由は、私のアプリケーションが100%単一ページであり、ユーザーがajax投稿を介して正常にログインすると/Account/JsonLogin、サーバーから返された「認証済みビュー」で現在のビューを切り替えるだけで、リロードしないためです。ページ。
手順3と4の間にページを単純にリロードしてもエラーが発生しないため、これが理由であることがわかります。
したがって@Html.AntiForgeryToken()、ロードされたフォームでは、ページがリロードされるまで、古いユーザーのトークンが返されるようです。
@Html.AntiForgeryToken()新しい認証済みユーザーのトークンを返すように変更するにはどうすればよいですか?
私は毎回GenericalPrincipalカスタムで新しいものを注入するので、呼び出されるまでに、実際には、プロパティがtrueに設定されたカスタムIDがありますが、ページのリロードを行わない限り、古いユーザーのトークンをレンダリングしているようです。IIdentityApplication_AuthenticateRequest@Html.AntiForgeryToken()HttpContext.Current.User.IdentityIsAuthenticated@Html.AntiForgeryToken