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和值参数。

  1. 您不会专门检查索赔,而是针对操作/资源对。 将实际的索赔/数据检查分解到授权pipe理器中。 关注点分离。
  2. 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类