IISの単一のサイトに複数のASP.net MVCアプリケーションがデプロイされています。すべてのアプリケーションがフォーム認証を使用しており、すべてのアプリケーションが同じマシンキーを使用するように構成されています。ASP.net MVCクロスアプリケーションPOSTリクエスト
アプリケーションの1つは、他のアプリケーションへのナビゲーションを提供し、ログイン/ログアウト機能が処理される「ベースサイト」です。ユーザーは、基本サイトにログインして他のアプリケーションを訪問することができ、それでも認証され、意図したとおりに動作します。
共有レイアウトビューのヘッダーにログアウトフォームがあり、ベースサイトに属するコントローラのログアウトアクションに投稿リクエストが送信されます。このフォームをベースサイトから送信すると、ログアウトは正常に機能します。しかし、私は他のサイトのいずれかからフォームを送信しようとすると、私はエラーメッセージが表示されます
"The anti-forgery cookie token and form field token do not match."
をこれは私のログオフアクションが私のセキュリティコントローラで次のようになります。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return Redirect("~/");
}
この私のフォームは、基地サイトビューで次のようになります。
using (Html.BeginForm("LogOff", "Security", FormMethod.Post, null))
{
@Html.AntiForgeryToken()
<input type="submit" value="Log Off"/>
}
ディレクトリが設定されている方法の他のサイトは、Bからログアウトアクションを呼び出すために、同じ形のわずかに異なるバージョンを使用しているためase site:
ベースサイトはディレクトリのルートにあり、他のアプリケーションはそのルート内の独自のフォルダに含まれています。
私が試した意見は、矛盾するフォームや偽造防止のトークンがなく、すべてのアプリケーション間でマシンキーが適切に設定されているようです。そうでなければ、認証が全く機能しないと思います。私は基本サイトにリダイレクトしてそこからログアウトアクションを実行することを検討していますが、もう少し単純な解決策がある場合は、それがうまくいくはずです。
Webアプリケーションは1つのソリューションに収まっていますか、またはアプリケーションごとに異なるソリューションがありますか? –
元々彼らは出版されていましたが、元々は異なった解決策にあります。 – pjthomso
異なるタイミングでログオフしようとしましたか?私はあなたがサインしたばかりの瞬間をどこから奪って何が起こったのかを知らせることを意味します。 –