Ich habe mehrere ASP.net MVC-Anwendungen auf einer einzigen Website in IIS bereitgestellt. Alle Anwendungen verwenden die Formularauthentifizierung und alle Anwendungen sind so konfiguriert, dass sie denselben Maschinenschlüssel verwenden.ASP.NET MVC Cross-Anwendung POST-Anfrage
Eine der Anwendungen ist eine "Basis-Site", die die Navigation zu den anderen Anwendungen ermöglicht und in der die Anmelde-/Abmeldefunktionen verarbeitet werden. So wie es aussieht, kann sich ein Benutzer bei der Basis-Site anmelden und die anderen Anwendungen besuchen und sie werden weiterhin authentifiziert, was wie beabsichtigt funktioniert.
Ich habe ein Logout-Formular in der Kopfzeile meiner freigegebenen Layout-Ansichten, die eine Post-Anfrage an die Abmeldung Aktion in einem Controller der Basis-Site übermittelt. Wenn ich dieses Formular von der Basis-Site aus absende, funktioniert die Abmeldung wie erwartet. Aber wenn ich versuche, die Form von einem der anderen Seiten einreichen, erhalte ich die Fehlermeldung:
"The anti-forgery cookie token and form field token do not match."
Dies ist, was Aktion mein Abmelde sieht aus wie in meinem Sicherheits-Controller:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return Redirect("~/");
}
Diese ist das, was meine Form wie in der Basisstations-Ansicht sieht:
using (Html.BeginForm("LogOff", "Security", FormMethod.Post, null))
{
@Html.AntiForgeryToken()
<input type="submit" value="Log Off"/>
}
den Weg Da die Verzeichnisse die anderen Standorte up verwenden eine etwas andere Version der gleichen Form rufen Sie die Abmeldung von der b gesetzt sind ase Website:
using (Html.BeginForm("LogOff", "../Security", FormMethod.Post, null))
{
@Html.AntiForgeryToken()
<input type="submit" value="Log Off"/>
}
Die Basisstelle ist an der Wurzel des Verzeichnisses und die anderen Anwendungen werden in einem eigenen Ordner innerhalb dieser Wurzel enthält.
Keine der Ansichten, die ich versucht habe, haben irgendwelche widersprüchlichen Formen oder Anti-Diebstahl-Token, und der Computerschlüssel unter allen Apps scheint richtig konfiguriert zu sein, sonst glaube ich nicht, dass die Authentifizierung überhaupt funktionieren würde. Ich überlege gerade, auf die Basis-Site umzuleiten und die Logout-Aktion von dort aus durchzuführen, aber wenn es noch eine einfachere Lösung gibt, auf die ich noch stoßen muss, wäre das nett.
Bleiben Ihre Webanwendungen in einer Lösung oder haben Sie für jede Anwendung eine andere Lösung? –
Ursprünglich sind sie in verschiedenen Lösungen, obwohl sie veröffentlicht wurden. – pjthomso
Haben Sie versucht, sich mit unterschiedlichen Timings abzumelden?Ich meine abloggen von wo Sie wollen in dem Moment, als Sie gerade unterzeichneten und lassen Sie mich wissen, was passiert –