使用Windows Identity Foundation重定向到自定义登录页面

时间:2011-06-13 06:00:52

标签: c# asp.net-mvc-3 authentication appfabric wif

我在MVC3站点中使用Windows Identity Foundation和Azure的AppFabric访问控制服务。我想弄清楚的是如果控制器或操作上有AuthorizeAttribute,如何控制WIF重定向用户的位置。 (这是我第一次使用WIF,似乎没有很多好的信息。)

我已禁用自动转发,因为它一直将我发送到默认的ACS身份验证页面。我想使用我的自定义登录页面将用户留在我的网站上,但我似乎无法弄清楚需要做些什么设置。

有没有办法,本地使用WIF,告诉它重定向到我的登录页面,还是我必须编写自己的AuthorizeAttribute来为我做这个?

谢谢!

修改

由于最近有一些活动,我想我会写出一些我的发现。不幸的是,我不是百分之百导致一切正常工作(这么多活动部件),但我最终得到WIF重定向到我的登录页面。

我没有在程序中添加任何代码,而是偏离了我发现的示例。我发现保留web.config的表单身份验证部分允许一切正常。在我的web.config中,我有正常的表单auth条目:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
    <authentication mode="Forms" >
        <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    ...
</system.web>

免责声明:我不知道这是否是使用WIF做事的正确方法 - 它恰好解决了我的问题。我可以在控制器或操作上使用常规[Authorize]属性,并且我可以正确地重定向到登录页面,就像我使用表单身份验证一样。

2 个答案:

答案 0 :(得分:3)

我用一个样本玩了一点,根据你在重定向之前需要做什么,它可能或者没有帮助。

在global.asax中,我已经为“ RedirectingToIdentityProvider ”事件添加了一个处理程序,我自定义它以添加说明, whr 参数。为此,您需要先在 ConfigurationCreated 事件中添加处理程序:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterRoutes(RouteTable.Routes);

    FederatedAuthentication.ServiceConfigurationCreated += new EventHandler<Microsoft.IdentityModel.Web.Configuration.ServiceConfigurationCreatedEventArgs>(FederatedAuthentication_ServiceConfigurationCreated);   
}

    void FederatedAuthentication_ServiceConfigurationCreated(object sender, Microsoft.IdentityModel.Web.Configuration.ServiceConfigurationCreatedEventArgs e)
    {
        var m = FederatedAuthentication.WSFederationAuthenticationModule;
        m.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(m_RedirectingToIdentityProvider);
    }

    void m_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
    {
        var sim = e.SignInRequestMessage;
        sim.HomeRealm = "Google";
    }

这适用于标准的 授权 属性。

如果此扩展点不够,那么您可以编写我们自己的属性以完全控制该过程。

看样品#3或#7。不是MVC3,而是MVC2,非常接近你正在做的事情。 http://claimsid.codeplex.com

此处描述了该过程:

http://msdn.microsoft.com/en-us/library/ff966481.aspx#sec14

答案 1 :(得分:1)

我相信您想要做的事情可以在以下示例中找到:http://acs.codeplex.com/wikipage?title=MVC3%20Custom%20Login&referringTitle=Samples

另请参阅此页面上的“联合身份验证配置”部分,了解passiveRedirectEnabled属性: http://msdn.microsoft.com/en-us/library/ee517293.aspx

  

passiveRedirectEnabled - 布尔值 - 默认为false   控制是否启用模块以自动重定向   未经授权的STS请求。