标签: authorize-attribute

如何使用Custom AuthorizeAttribute控制器利用参数值?

我正在尝试保护控制器操作以防止用户访问他们无权访问的实体.我可以使用以下代码执行此操作.

public ActionResult Entity(string entityCode)
{
    if (CurrentUser.VerifyEntityPermission(entityCode))
    {
        //populate viewModel...
        return View(viewModel);
    }
    return RedirectToAction("NoAccessToEntity", "Error");
}
Run Code Online (Sandbox Code Playgroud)

我希望能够为控制器操作本身添加一个属性.为了验证对实体的访问,我需要查看传递给控制器​​的值以及用户可以访问的实体.这可能吗?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)

c# security asp.net-mvc authorize-attribute controller-action

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

ASP.NET MVC AuthorizeAttribute将值传递给ActionMethod?

我只是ASP.NET MVC的新手,我不确定如何以"正确的方式"完成某项任务.

本质上,我将登录的userId存储在HttpContext.User.Identity中,并编写了一个EnhancedAuthorizeAttribute来执行一些自定义授权.

在overriden OnAuthorization方法中,我的域模型命中数据库以确保当前用户id可以访问传入的routeValue"BatchCode".原型是:

ReviewGroup GetReviewGroupFromBatchCode(string batchCode);
Run Code Online (Sandbox Code Playgroud)

如果用户无法访问ReviewGroup,则它将返回null,然后OnAuthorization拒绝访问.

现在,我知道装饰动作方法只有在OnAuthorization通过时才会执行,但我不想再次访问数据库以再次获取ReviewGroup.

我正在考虑将ReviewGroup存储在控制器中HttpContext.Items["reviewGroup"]并从控制器访问它.

这是一个可行的解决方案,还是我走错了路?

谢谢!

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

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

asp.net MVC 3将AuthorizeAttribute应用于区域

我目前正在编写一个Admin MVC 3站点,每个用户只能访问该站点的某些部分.

我的站点区域与用户角色相同,所以我想要做的是在每个区域放置AuthorizeAttribute,使用区域名称作为角色中的参数.

到目前为止,当我对每个区域的检查进行硬编码时,我已经开始工作了,但是我想循环遍历所有区域并应用授权过滤器.(我使用它作为我的自定义FilterProvider - http://www.dotnetcurry.com/ShowArticle.aspx?ID=578)

到目前为止我的代码("Gcm"是我的一个领域,也是一个角色):

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    // for all controllers, run AdminAuthorizeAttribute to make sure they're at least logged in
    filters.Add(ObjectFactory.GetInstance<AdminAuthorizeAttribute>());

    AdminAuthorizeAttribute gcmAuthroizeAttribute = ObjectFactory.GetInstance<AdminAuthorizeAttribute>();
    gcmAuthroizeAttribute.Roles = "Gcm";

    var provider = new FilterProvider();
    provider.Add(
        x =>
        x.RouteData.DataTokens["area"] != null && x.RouteData.DataTokens["area"].ToString() == "Gcm"
            ? gcmAuthroizeAttribute
            : null);
    FilterProviders.Providers.Add(provider);
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何获得我的应用程序的所有区域,所以我可以循环它们,而不是硬编码每个区域?

或者,如果有人对如何授权每个区域有更好的了解,那将是值得赞赏的.

谢谢你的帮助Saan

asp.net-mvc filter asp.net-mvc-areas authorize-attribute asp.net-mvc-3

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

AuthorizeAttribute v Application_AuthenticateRequest

我们想要授权用户,如果他们被授权,我们想要将他们的角色和权限添加到用户并将其添加到IPrinciple

我们有两种方法可以做到这一点就是在global.asax中执行它.AndhenticateRequest另一种方法是创建一个继承自AuthorizeAttribute的属性

这里有没有闪闪发光的好选择?

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

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

基于角色的模型列表授权

我有3个型号[用户,角色和用户角色]

Use {ID [PK], Name, Email, Password, .....}
Role {ID [PK], Name, Description, .......}
UserRole {UserID [FK], RoleID [FK]}

考虑使用[Authorize]属性在控制器上进行基于角色的授权,指定用户必须具有管理员角色才能访问类中的任何控制器操作

[Authorize(Roles = "Administrator")]
public class PageController : Controller
{
    // Controller code here
}
Run Code Online (Sandbox Code Playgroud)

这很好,我需要的是,

有没有办法将我的角色集分配给[授权]属性?例如

我将从登录用户中获取已分配的角色并将其存储在列表中.是否可以将此列表分配给[授权]属性?如下所示:

[Authorize(Roles = MyDynamicallyLoadedList)]
public class PageController : Controller
{
    // Controller code here
}
Run Code Online (Sandbox Code Playgroud)

authorization role-based authorize-attribute asp.net-mvc-3

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

MVC4授权属性覆盖; 如何通过角色?

我正在尝试创建自己的[Authorize]属性,这样我就可以使用自己的授权逻辑来获得分层角色.

如果有人[Authorize(Roles = "Admin")]在控制器或操作上如何在AuthorizeCore函数中获取字符串"Admin"?

我正在使用此代码:

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //authorize role logic
            if (true)
                return true;

        return false;
     }
    }
Run Code Online (Sandbox Code Playgroud)

MVC4,.net 4.5,c#,VS 2012

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

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

在身份2.0中重定向未授权用户

对于我的mvc5项目,我已经实现了默认身份,但根据要求进行了更改.现在我想将未经授权的用户重定向到我创建的视图.我创建了一个自定义授权过滤器.当未经授权的用户输入时,会进入我的错误视图.我可以通过URL识别它.但问题是它没有在视图中显示内容.相反,它显示HTTP 404错误.我把我的代码放在下面.我知道这里有好几次.但我仍然无法解决它.所有帮助赞赏.提前致谢!

public class CustomAuthorize : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new
            RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ErrorController

public class ErrorController : Controller
{
    // GET: Error
    public ActionResult Index()
    {
        return View();
    }

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

AccessDenied视图

<h2>AccessDenied</h2>

Access Denied
Run Code Online (Sandbox Code Playgroud)

在特定的控制器上

[CustomAuthorize(Roles = "Admin")]
public class ProductTypeController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误

HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确. …

asp.net-mvc authorize-attribute asp.net-mvc-5 asp.net-identity asp.net-identity-2

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

将数据从AuthorizeCore传递到HandleUnauthorizedRequest,然后在ASP.NET MVC4中传递Action

我有一个自定义实现AuthorizeAttribute手柄未经授权的用户访问了我重写了以下方法:AuthorizeCore,然后HandleUnauthorizedRequest.

  • 用于检查用户访问的逻辑是 AuthorizeCore.
  • 重定向到控制器/操作是HandleUnauthorizedRequest.

现在,我想知道如何将AuthorizeCore中的数据发送到控制器/操作?遵循该顺序:

  1. AuthorizeCore 创建一条消息.
  2. HandleUnauthorizedRequest 执行重定向并传递先前创建的消息.
  3. 控制器/动作接收消息.

注意:我不想通过QueryString接收消息.

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

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

自定义AuthorizeAttributte与Enum Roles params在ajax调用中获取null值

我的自定义AuthorizeAttribute遇到了一些问题

public class ExplicitAuthorizeAttribute : AuthorizeAttribute
{
    private readonly MembershipUserRole[] _acceptedRoles;

    public ExplicitAuthorizeAttribute()
    {

    }

    public ExplicitAuthorizeAttribute(params MembershipUserRole[] acceptedRoles)
    {
        _acceptedRoles = acceptedRoles;
    }

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

我这样使用它:

[ExplicitAuthorize[(MembershipUserRole.Admin, MembershipUserRole.SuperAdmin)]
Run Code Online (Sandbox Code Playgroud)

它非常适合HttpGet和HttpPost验证我的控制器和方法.

但是当我在ApiController中使用它并进行ajax调用时,AuthorizeCore没有运行,我遇到了安全漏洞.:/

我的枚举看起来像这样

[Flags]
public enum MembershipUserRole
{
    Admin= 1,
    SuperAdmin = 2
}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我的AuthorizeCore在这种情况下没有验证?

顺便说一下如果我用

[Authorized(Roles ="Admin, SuperAdmin")]
Run Code Online (Sandbox Code Playgroud)

这是完美的验证,但我想要Stronly Typed Roles,这就是我使用枚举的原因.

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

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

Asp.net Core 中多个声明的基于声明的授权

从这篇文章中得到帮助:

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies

我尝试为我的操作创建一些策略,但在某些操作中我想要多个策略,如果用户拥有其中一个,他们可以访问控制器的操作:

    [Authorize(Policy = "CanAccessMenu1")]
    [Authorize(Policy = "CanAccessMenu2")]
 public async Task<IActionResult> ActionFroMultiplePolicies([FromBody] ActionRequest request)
        {
//..............
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能合并这个政策?我可以使用这样的东西吗?

[授权(政策=“CanAccessMenu1,CanAccessMenu2”)]

在这种情况下,也许我需要对此覆盖功能进行一些更改。但我对此没有任何想法:

Protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, CanAccessRequirement requirement)
        {
        }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

authorization controller authorize-attribute data-annotations asp.net-core

5
推荐指数
0
解决办法
1743
查看次数