将AuthorizeAttribute应用于控制器类并同时应用于操作



是否有一种方法可以使[Authorize]属性在具有Authorize属性的控制器类中的一个动作中被忽略?

        [Authorize]
        public class MyController : Controller
        {
           [Authorize(Users="?")]//I tried to do that and with "*", but unsuccessfuly,
           public ActionResult PublicMethod()
           {
           //some code
           }
           public ActionResult PrivateMethod()
           {
           //some code
           }
        }

只有PrivateMethod()应该需要身份验证,但它也被要求了。

PS:我不想自定义授权过滤器。

[]的

可以使用[AllowAnonymous]

 [Authorize]
 public class MyController : Controller
 {
     [AllowAnonymous]
     public ActionResult PublicMethod()
     {
           //some code
     }
     public ActionResult PrivateMethod()
     {
           //some code
     }
  }

默认情况下,这是不可能的-如果您为控制器设置[授权],那么只有认证的用户可以访问操作。

你可以尝试自定义决策:stackoverflow.

本文提供了一个解决方案:保护您的ASP。. NET MVC 3 Application

本文讨论了一种白名单方法,其中使用AllowAnonymous自定义属性来修饰操作。它要求您扩展AuthorizeAttributeOnAuthorization方法以跳过AllowAnonymous -actions的授权检查。(该方法归功于MVC团队的安全专家Levi。)
    public class MyController : Controller
    {
       [Authorize] //it will only work for the following action
       public ActionResult PublicMethod()
       {
       //some code
       }
       public ActionResult PrivateMethod()  //[Authorize] will not work for this action
       {
       //some code
       }
    }

仅供将来参考,这现在可以通过ASP中的[AllowAnonymous]属性来完成。Net MVC 4。

更多信息

最新更新