Обрабатывать WIF SignInResponseMessage (Post), когда пользователь запрашивает метод действия с перегрузками [HttpGet] и [HttpPost]] - PullRequest
0 голосов
/ 26 сентября 2011

Я думал, что решение этой проблемы придет ко мне, поскольку я сидел над этой проблемой в течение многих месяцев - но мой мозг не помечает очевидный лучший подход.

У меня есть два метода контроллера, которые говорят «Редактировать»"которые защищены фильтром действий, который вызывает пассивную аутентификацию для STS.

[HttpGet]
public ActionResult Edit(Guid id) { [do stuff] }

[HttpPost]
public ActionResult Edit(Guid id, EditViewModel model) { [do stuff] }

Проблема в том, что mvc получает SignInResponseMessage, а затем запускает HttpPost, который не тот, который я хочу ...подошли к этой проблеме и чувствуете, что у них есть хорошее решение?

Полагаю, я мог бы однозначно назвать все свои методы действий, если худший из них станет хуже, т.е. старый добрый mvc1 Edit () против Update () / New ()vs Create () и т. д.

1 Ответ

0 голосов
/ 07 октября 2011

У меня есть решение ...

Вместо того, чтобы разрешать STS публиковать на любой URL (и нажимать на любое действие в приложении), я использую настройку в своем STS для публикации на один URL, у которого есть метод действия, который выглядит следующим образом:

public ActionResult Index() {

    if (MyIdentity.IsAuthenticated) {
        if (ControllerContext.HttpContext.Request["wreply"] != null)
        {
            var returnUrl = ControllerContext.HttpContext.Request["wreply"];
            if (returnUrl.StartsWith(Stgs.WebRt)) { return Redirect(returnUrl); } //make sure the wreply is actually for this application and not a random url
        }

        return Redirect("/"); 
    }

    return View(); 
}

Затем в STS, когда я создаю сообщение SignOutResponse, я добавляю строку:

response.SetParameter("wreply", message.Reply);

, где "reponse" - это Microsoft.IdentityModel.Protocols.WSFederation.SignInReponseMessage, а "message" - это Microsoft.IdentityModel.Protocols.WSFederation.SignInRequestMessage. Это в основном добавляет неверные данные в виде входных данных, которые публикуются проверяющей стороне. Следовательно, приведенный выше код действия контроллера работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...