如何在ASP.NET MVC中进行“选择退出”身份验证

时间:2011-08-01 13:27:52

标签: asp.net asp.net-mvc forms-authentication authorization

  

可能重复:
  Override Authorize Attribute in ASP.NET MVC

在ASP.NET MVC中,您在操作方法上方添加[Authorize]属性,以指定必须对用户进行身份验证(并在适当的指定角色中)才能使用该方法。

这有点像'选择加入'身份验证 - 我必须记住装饰我想要保护的每个方法,这很容易出错。

除了控制器或我列入白名单的操作外,我如何指定所有内容都需要身份验证?

2 个答案:

答案 0 :(得分:2)

这是基本的想法。您应该使用它来获得所需的结果 - 尤其是当控制器内的某些操作需要授权时,某些操作需要 - 而不是。 如您所知,asp.net mvc框架的每个部分都可以自定义。它的过滤器提供机制也是如此。首先,创建用于提供授权过滤器的IFilterProvider实现

 public class AuthorizeFilterProvider : IFilterProvider
    {
        public List<Type> AuthorizationExcludedControllerTypes = new List<Type>();

        #region IFilterProvider Members

        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            if (!AuthorizationExcludedControllerTypes.Contains(controllerContext.Controller.GetType()))
            {
                yield return new Filter(new AuthorizeAttribute(), FilterScope.Controller, null);
//return filter only if it is not included into AuthorizationExcludedControllerTypes list.
            }
        }

        #endregion
    }

将过滤器提供程序注册到Global.asax

 protected void Application_Start()
        {
            ...

            AuthorizeFilterProvider authorizeFilterProvider = new AuthorizeFilterProvider();
            authorizeFilterProvider.AuthorizationExcludedControllerTypes.Add(typeof(HomeController));

            FilterProviders.Providers.Add(authorizeFilterProvider );

            ...

        }

答案 1 :(得分:1)

默认情况下,您不能,但请参阅此答案,了解有关创建自己的自定义授权属性的信息:Override Authorize Attribute in ASP.NET MVC