У меня есть несколько приложений ASP.net MVC, развернутых на одном сайте в IIS. Все приложения используют проверку подлинности на основе форм, и все приложения настроены на использование одного и того же машинного ключа.ASP.net MVC cross application POST request
Одно из приложений - это «базовый сайт», который обеспечивает навигацию к другим приложениям и выполняет обработку функций входа/выхода. В соответствии с этим пользователь может войти в систему на базовом сайте и посетить другие приложения, и они все равно будут проходить проверку подлинности, которая работает по назначению.
У меня есть форма выхода в заголовок моих общих макетов, которая отправляет запрос на отправку к действию выхода в контроллер, принадлежащий базовому сайту. Когда я отправляю эту форму с базового сайта, выход из системы работает так, как ожидалось. Но если я пытаюсь отправить форму любых из других сайтов, я получаю сообщение об ошибке:
"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"/>
}
Благодаря тому, как каталоги создаются другие сайты используют несколько иную версию той же формы, чтобы вызвать действие выхода из б сайт аза:
using (Html.BeginForm("LogOff", "../Security", FormMethod.Post, null))
{
@Html.AntiForgeryToken()
<input type="submit" value="Log Off"/>
}
Базовый сайт находится в корневом каталоге, и другие приложения содержатся в отдельной папке в пределах этого корня.
Ни одна из представлений, которые я пробовал, имеет какие-либо противоречивые формы или противоугонные маркеры, а машинный ключ среди всех приложений, похоже, настроен должным образом, иначе я не думаю, что аутентификация будет работать вообще. Я рассматриваю возможность просто перенаправления на базовый сайт и выполнения действия выхода из системы, но если есть еще одно более простое решение, с которым мне еще предстоит столкнуться, это было бы хорошо.
Поддерживает ли ваши веб-приложения одно решение или у вас есть другое решение для каждого приложения? –
Первоначально они находятся в разных решениях, хотя они были опубликованы. – pjthomso
Вы пытались выйти с разными таймингами?я имею в виду выход из того места, где вы хотите, чтобы тот момент, когда вы только что подписались, и дайте мне знать, что произойдет. –