MVC5声明Authorize属性的版本
我在VS2013 RC中使用MVC5和新的OWINauthentication中间件尝试了一些新东西。
所以,我习惯于使用[Authorize]
属性来限制angular色的行为,但我试图使用基于声明/活动的授权,而我找不到它的等价属性。
有没有一个明显的我失踪或我需要推出自己的? 我有点期待那里有一个开箱即用。
我正在寻找的东西是沿着[Authorize("ClaimType","ClaimValue")]
我想。
提前致谢。
我结束了只是写一个简单的属性来处理它。 没有一堆额外的configuration,我在框架中找不到任何东西。 下面列出。
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); } } }
当然,如果你愿意以某种方式使用控制器 – 动作 – 动词三元组,你可以删除types和值参数。
- 您不会专门检查索赔,而是针对操作/资源对。 将实际的索赔/数据检查分解到授权pipe理器中。 关注点分离。
- MVC和ClaimsPrincipalPermission不是很好的匹配。 它抛出一个SecurityException,并不是unit testing友好的。
我的版本在这里: http : //leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
我发现你仍然可以使用带有声明的angular色和用户的授权属性。
为此,您的ClaimsIdentity必须包含两个特定的索赔types:
ClaimTypes.Name
和
ClaimTypes.Role
然后在你的类派生自OAuthAuthorizationServerProvider,在你使用的GrantXX方法中,当你创build你的ClaimsIdentity时,添加这两个声明。
例:
var oAuthIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, context.ClientId), new Claim(ClaimTypes.Role, "Admin"), }, OAuthDefaults.AuthenticationType);
然后在任何操作你可以使用[Authorize(Roles ="Admin")]
来限制访问。
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")] public ActionResult Delete(int id) { _customer.Delete(id); return RedirectToAction("CustomerList"); }
ClaimsPrincipalPermissionAttribute类