我正在尝试在ASP.NET Core中创建自定义授权属性.在以前的版本中,可以覆盖bool AuthorizeCore(HttpContextBase httpContext).但这不再存在于AuthorizeAttribute.
制作自定义AuthorizeAttribute的当前方法是什么?
我想要完成的任务:我在Header Authorization中收到一个会话ID.从该ID我将知道特定动作是否有效.
我试图在ASP.NET Core 1.0(MVC 6)Web应用程序中设置授权.
更严格的方法 - 默认情况下,我希望将所有控制器和操作方法限制为具有Admin角色的用户.所以,我正在添加一个全局授权属性,如:
AuthorizationPolicy requireAdminRole = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole("Admin")
.Build();
services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(requireAdminRole));});
Run Code Online (Sandbox Code Playgroud)
然后我想允许具有特定角色的用户访问具体的控制器.例如:
[Authorize(Roles="Admin,UserManager")]
public class UserControler : Controller{}
Run Code Online (Sandbox Code Playgroud)
这当然是行不通的,因为"全局过滤器"不允许UserManager访问控制器,因为它们不是"管理员".
在MVC5中,我能够通过创建自定义授权属性并将我的逻辑放在那里来实现这一点.然后使用此自定义属性作为全局.例如:
public class IsAdminOrAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
ActionDescriptor action = filterContext.ActionDescriptor;
if (action.IsDefined(typeof(AuthorizeAttribute), true) ||
action.ControllerDescriptor.IsDefined(typeof(AuthorizeAttribute), true))
{
return;
}
base.OnAuthorization(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图创建一个自定义AuthorizeFilter,但没有成功.API似乎有所不同.
所以我的问题是:是否可以设置默认策略,然后为特定控制器和操作覆盖它.或类似的东西.我不想这样做
[Authorize(Roles="Admin,[OtherRoles]")]
Run Code Online (Sandbox Code Playgroud)
在每个控制器/操作上,因为这是一个潜在的安全问题.如果我不小心忘记了这个Admin角色会发生什么.
Net Core策略授权,但对我来说它看起来非常静态.因为在企业应用程序中,经常需要新的角色,这些角色需要新的策略(据我所知)或者您想要实现特定于某个客户端的新类型的策略.例如,如果我们正在构建一个由这些策略驱动的CMS,我们将希望每个客户端能够定义他自己的策略.那么这个新的政策基础机制能否更具活力,或者它的想法完全不同?
谢谢 :))
这不是一个重复的问题,或者说其他解决方案中给出的解决方案没有奏效.
让我们说有一个cntroller
[Authorize(Roles=//set dynamically)]
public IActionResult DashBoard(LoginModel model)
{
}
Run Code Online (Sandbox Code Playgroud)
我在以下问题中尝试了解决方案
3)动态添加角色以授权控制器的属性(错误:句柄方法 - 找不到合适的方法来覆盖)
所有这些解决方案都不起作用,因为接口中覆盖的方法不存在(例如,authorizeAttribute不包含AuthorizeCore的定义),或者在某些情况下,IServiceCollection服务不包含特定方法
asp.net authorize-attribute asp.net-identity role-based-access-control asp.net-core
这个问题与这里的问题基本相同,但是,对于asp.net核心,同时使用asp.net核心cookie中间件.
是否可以在验证时访问查询字符串/请求正文数据,如果是,您会鼓励这个想法吗?看来,根据这一点,它很可能是大男孩asp.net中的相同规则(例如你只是在给定的请求生命周期中读取一次请求数据)?
示例:我正在创建一个应用,其中人们拥有一个帐户,但是,他们是不同团队的成员.他们可以在应用程序中执行许多不同的操作,并且他们可以在一个团队或其他成员的"上下文"中执行该操作.所以,我在向服务器发出的请求中传递了一个teamId整数.我想从ClaimsPrincipal中提出索赔,确认他们确实是管道授权部分中该团队的成员.