相关疑难解决方法(0)

覆盖控制器AuthorizeAttribute只执行一个操作

我有一个用AuthorizeAttribute修饰的控制器.除了一个需要CustomAuthorizeAttribute提供的自定义身份验证的操作外,控制器还包含几个需要身份验证的操作.

我的问题是,一旦我在控制器级别添加[授权],我可以使用[CustomAuthorize]仅在一个操作上覆盖它(或删除它)吗?或者我是否必须从控制器级别删除[授权]并将其单独添加到其他每个操作?

我纯粹是为了方便,因为我很懒,不想用AuthorizeAttribute来装饰每一个动作.

[Authorize]
public class MyController : Controller {

  //requires authentication
  public ViewResult Admin() {
    return View();
  }

  //... a lot more actions requiring authentication

  //requires custom authentication
  [CustomAuthorize]  //never invoked as already failed at controller level
  public ViewResult Home() {
    return View();
  }

}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc

61
推荐指数
4
解决办法
2万
查看次数

System.Web.Http.Authorize与System.Web.Mvc.Authorize

哪个授权属性?
System.Web.Http.Authorize
System.Web.Mvc.Authorize

using System.Web.Mvc      // or
using System.Web.Http  
Run Code Online (Sandbox Code Playgroud)

典型的控制器

    [Authorize]
    public class SomeController : Controller
Run Code Online (Sandbox Code Playgroud)

我们有控制器注释[Authorize] 我注意到由于使用命名空间,注释在技术上引用了不同的属性类.

该项目包含MVC控制器和WEBAPI控制器.

我应该使用哪一个?为什么?如果我不解决这个问题,我们可能会遇到什么问题?

asp.net asp.net-mvc asp.net-web-api

59
推荐指数
1
解决办法
9922
查看次数

如何允许匿名用户访问MVC中的某个给定页面?

我在ASP.NET MVC Web应用程序中启用了表单身份验证.我想允许匿名用户只访问某些特定页面,例如Register.cshtml.通过这样做,我能够允许从我的根web.config访问我的CSS文件.

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

现在我想允许匿名访问其他页面,如Home和Register.有人知道如何实现这个目标吗?

c# asp.net-mvc forms-authentication

31
推荐指数
2
解决办法
5万
查看次数

将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
           }
        }
Run Code Online (Sandbox Code Playgroud)

只需要PrivateMethod()就可以进行身份​​验证,但也需要它.

PS:我不想制作我的自定义授权过滤器.

[]的

authentication authorization asp.net-mvc-3

9
推荐指数
2
解决办法
1万
查看次数

多个相互了解的授权属性

我有一个非常简单的场景.我想用自定义授权属性装饰我的控制器/操作.如果任何属性有效,则应授予授权.例如,

[MyAuth(1)]
[MyAuth(2)]
public class MyController : Controller
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我无法将参数组合到单个授权属性中.以上示例仅是一个简化示例.

如果任一属性授权用户,我希望用户获得授权.我认为ActionFilterAttribute或者AuthorizeAttribute有办法看看其他过滤器已被执行并等待执行,但没有这样的运气.

我怎么能做到这一点?由于属性似乎没有任何意识,也许是HttpModule?一个习惯ControllerActionInvoker

c# asp.net-mvc authorize-attribute asp.net-mvc-4

8
推荐指数
1
解决办法
5530
查看次数

如何在控制器和操作级别使用Authorize属性?

我已经实现了自己的自定义Authorize属性.

该属性既适用于控制器级别,也适用于操作级别.

这是我需要做的一个例子:

[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
    [ClaimsAuthorize(Roles = "Administrators")]
    public ActionResult AdministrativeTask()
    {
        return View();
    }

    public ActionResult SomeOtherAction()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,如果用户具有管理员角色但不具有AdvancedUsers角色,则他无法执行"管理任务".

即使用户未在控制器级别授权,如何更改此行为以在操作级别执行安全检查?

目前,我能想到的唯一解决方案是实现2个属性:一个用于保护控制器,另一个用于保护操作.然后我将使用Order属性首先在动作级别执行一个.

但是,如果可能的话,我更喜欢具有单个属性的解决方案.

c# security asp.net-mvc

6
推荐指数
2
解决办法
1万
查看次数

当类级别验证已在 MVC 中声明时,如何使用操作级别验证覆盖自定义过滤器属性

我的控制器在类级别使用一个属性,它只允许一个角色访问。这个控制器有 20 多个动作。但是对于仅一项操作,我还需要一个角色才能获得访问权限。我已经在类级别声明了属性过滤器,以便它对控制器类中的所有操作都能正常工作。但现在我只想在同一个控制器中覆盖一个动作。有没有可能?我正在使用 .Net 4.5 版。

过滤器属性实现是这样的:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class RequireModulePermissionAttribute : AuthorizeAttribute
{
   //code goes here
}
Run Code Online (Sandbox Code Playgroud)

控制器类:

[RequireModulePermission("Admin")]
public class AdministrationController : Controller
{
    [HttpPost]
    [RequireModulePermission("Admin","Supervisor")]
    public ActionResult CreateUser(UserViewModel userVM)
    {
       //code goes here
    }   
}
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc filter custom-attributes asp.net-mvc-4

1
推荐指数
1
解决办法
2907
查看次数

获取 MVC AllowAnonymous 来覆盖自定义授权属性

我已经创建了一个自定义授权属性,但我需要一些操作来允许匿名访问。我尝试了三种不同的方法,但没有成功:使用AllowAnonymous、使用附加参数更新现有属性,以及创建新的覆盖属性。基本上,控制器级属性似乎总是​​在操作级属性之前被调用。

这是控制器:

[AuthorizePublic(Sites = AuthSites.Corporate)]
public class CorporateController : SecuredController
{
    [AuthorizePublic(Sites = AuthSites.Corporate, AllowAnonymous = true)]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及属性:

public class AuthorizePublic : AuthorizeAttribute
{
    public AuthSites Sites { get; set; }
    public bool AllowAnonymous { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        // Logic
    }        
}
Run Code Online (Sandbox Code Playgroud)

作为最后的手段,我可​​以将登录操作移动到它们自己的控制器上,但在这样做之前,我是否缺少一些东西来使这些方法之一发挥作用?我有点惊讶的是操作级属性并没有覆盖控制器级属性。

asp.net-mvc

0
推荐指数
1
解决办法
3215
查看次数