Eig*_*ite 75 asp.net-mvc claims asp.net-mvc-5
我正在使用MVC5和新的OWIN认证中间件尝试VS2013 RC中的一些新功能.
所以,我习惯使用[Authorize]属性来限制角色的操作,但我正在尝试使用基于声明/活动的授权,而我找不到它的等效属性.
有一个明显的我错过了或者我需要自己动手吗?我有点希望有一个开箱即用.
我正在寻找的具体是[Authorize("ClaimType","ClaimValue")]我想的.
提前致谢.
Eig*_*ite 70
我最后只是写了一个简单的属性来处理它.如果没有一堆额外的配置,我就无法在框架中找到任何东西.下面列出.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您乐意以某种方式使用controller-action-verb triplet来声明索引,则可以删除类型和值params.
lea*_*ege 30
我的版本在这里:http: //leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
我发现你仍然可以使用带有声明的角色和用户的Authorization属性.
为此,您的ClaimsIdentity必须包含两种特定的声明类型:
ClaimTypes.Name
Run Code Online (Sandbox Code Playgroud)
和
ClaimTypes.Role
Run Code Online (Sandbox Code Playgroud)
然后在您从OAuthAuthorizationServerProvider派生的类中,在您使用的GrantXX方法中,在创建ClaimsIdentity时,添加这两个声明.
例:
var oAuthIdentity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, context.ClientId),
new Claim(ClaimTypes.Role, "Admin"),
}, OAuthDefaults.AuthenticationType);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用任何操作[Authorize(Roles ="Admin")]来限制访问.
| 归档时间: |
|
| 查看次数: |
48022 次 |
| 最近记录: |