我正在尝试使用MVC5和新的OWIN身份验证中间件在VS2013 RC中进行一些新操作。
因此,我习惯于使用该[Authorize]
属性按角色来限制操作,但是我尝试使用基于声明/活动的授权,但找不到与其等效的属性。
是否有明显的我想念的东西,还是我需要自己动手?我有点希望开箱即用。
我要寻找的具体是[Authorize("ClaimType","ClaimValue")]
我所想的东西。
提前致谢。
我正在尝试使用MVC5和新的OWIN身份验证中间件在VS2013 RC中进行一些新操作。
因此,我习惯于使用该[Authorize]
属性按角色来限制操作,但是我尝试使用基于声明/活动的授权,但找不到与其等效的属性。
是否有明显的我想念的东西,还是我需要自己动手?我有点希望开箱即用。
我要寻找的具体是[Authorize("ClaimType","ClaimValue")]
我所想的东西。
提前致谢。
Answers:
我最终只是编写了一个简单的属性来处理它。没有大量额外的配置,我无法在框架中找到任何东西。下面列出。
public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
private string claimType;
private string claimValue;
public ClaimsAuthorizeAttribute(string type, string value)
{
this.claimType = type;
this.claimValue = value;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var user = filterContext.HttpContext.User as ClaimsPrincipal;
if (user != null && user.HasClaim(claimType, claimValue))
{
base.OnAuthorization(filterContext);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
当然,如果您愿意以某种方式将controller-action-verb三元组用于声明,则可以删除类型和值参数。
filterContext.HttpContext.user
。
我的版本在这里:http : //leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
我发现您仍然可以将Authorization属性用于角色和用户以及声明。
为此,您的ClaimsIdentity必须包括2种特定的索赔类型:
ClaimTypes.Name
和
ClaimTypes.Role
然后,在派生自OAuthAuthorizationServerProvider的类中,在使用ClaimsIdentity时,在使用的GrantXX方法中添加这2个声明。
例:
var oAuthIdentity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, context.ClientId),
new Claim(ClaimTypes.Role, "Admin"),
}, OAuthDefaults.AuthenticationType);
然后,您可以执行任何操作[Authorize(Roles ="Admin")]
来限制访问。
在ASP.NET Core 3中,您可以像这样配置安全策略:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});
}
然后使用AuthorizeAttribute要求用户满足特定策略的要求(换句话说,满足支持该策略的声明)。
[Authorize(Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
来源。