Как создать MVC-эквивалент элемента управления WIF PassiveSignInStatus?

Я включил ниже на своей странице просмотра MVC

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Base.Master"  Inherits="System.Web.Mvc.ViewPage" %>

 <%@ Register TagPrefix = "idfx" Assembly = "Microsoft.IdentityModel, Version=3.5.0.0,  Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace =  "Microsoft.IdentityModel.Web.Controls" %>

  <asp:Content ID="Content2" ContentPlaceHolderID="Content" runat="server">

   <idfx:FederatedPassiveSignInStatus 
            ID="FederatedPassiveSignInStatus1" 
            runat="server" 
            OnSignedOut="FederatedPassiveSignInStatus1SignedOut" 
            SignOutText="Logout" 
            FederatedPassiveSignOut="true"   
            SignOutAction="FederatedPassiveSignOut" />
  </asp:Content>

Поскольку это MVC, у меня не может быть атрибута runat = ”server”. Когда я удаляю атрибут runat, страница загружается нормально, но элемент управления не отображается. Как я могу добиться этого в MVC?


person Spock    schedule 20.03.2011    source источник


Ответы (2)


Учебный комплект по идентификации или образцы в http://claimsid.codeplex.com/releases/view/62929 должен показать вам способы подключения WIF к MVC.

person Eugenio Pace    schedule 27.03.2011

Проблема в том, что вы не можете использовать управляемые событиями серверные элементы управления в ASP.NET MVC, как в веб-формах ASP.NET. Если вы используете веб-формы, то использование элемента управления FederatedPassiveSignInStatus для выхода из системы - самый простой способ.

В MVC нам придется вручную отправить провайдеру STS команду wa = wsignout1.0. Если вы посмотрите на

Взгляните на проект FederationWithMultiplePartnersAndAcs в проектах Microsoft по шаблонам и практикам Cliams Identity Guide, которые находятся на здесь. Если вы посмотрите на метод Logout() на HomeController, вы увидите следующий код, который делает то, что нам нужно:

public ActionResult Logout()
{
    if (this.User.Identity.IsAuthenticated)
    {
        FederatedAuthentication.WSFederationAuthenticationModule.SignOut(false);

        string issuer = FederatedAuthentication.WSFederationAuthenticationModule.Issuer;
        var signOut = new SignOutRequestMessage(new Uri(issuer));
        return this.Redirect(signOut.WriteQueryString());
    }

    return this.RedirectToAction("Index");
}

Вот как вам нужно будет реализовать логику выхода в MVC.

person atconway    schedule 10.10.2012