Entity framework 在Web Api 2 OData端点中使用基于声明的授权保护实体
给定以下控制器Entity framework 在Web Api 2 OData端点中使用基于声明的授权保护实体,entity-framework,claims-based-identity,asp.net-web-api2,asp.net-authorization,Entity Framework,Claims Based Identity,Asp.net Web Api2,Asp.net Authorization,给定以下控制器 namespace MyNamespace.Api.Controllers { [Authorize] public class AccountController : ODataController { private Entities db = new Entities(); // GET odata/Account [Queryable] [ClaimsPrincipalPermiss
namespace MyNamespace.Api.Controllers
{
[Authorize]
public class AccountController : ODataController
{
private Entities db = new Entities();
// GET odata/Account
[Queryable]
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Read", Resource = "Account")]
public IQueryable<Account> GetAccount()
{
return db.Accounts();
}
...
}
}
这仅在我可以检查当前负责人一般是否可以读取帐户时有用。然而,如果我想检查某个用户可以阅读哪些帐户,我就迷路了
假设我有一个经理用户,他应该能够读取他作为经理的所有帐户,而非经理用户应该只能读取他们自己的帐户
有这样的最佳实践吗?或者您以前是否做过类似的事情,并给我一些提示来寻找?我不使用
ClaimsPrincipalPermissionAttribute
,因为我无法像从您的示例中请求的帐户那样向其传递任何动态参数
请参阅第97页的“Pro APS.NET Web API安全性”一书。他们建议通过代码new IdentityConfiguration().ClaimsAuthorizationManager.CheckAccess(context)
从控制器操作实现中调用AuthorizationManager,其中context
是手动构造的,因此您可以传递请求的帐户(例如)作为资源
在您的授权管理器
实现中检查它
还可以看一看pluralsight培训“介绍.NET 4.5中的身份和访问控制”。还有一些关于如何在Web API中实现基于声明的安全性的信息
现在,我正在实施您所讨论的安全性,我对这个主题也很感兴趣
我的案例是:角色管理员是按国家分配的,每个管理员只能看到与他们有权访问的国家相关的实体
更新:在几个项目之后,我忘记了基于声明的安全性,因为这是进行安全检查的极其困难的方法。今天,我使用decorator模式来完成所有的安全检查。即使在OData控制器中,实现安全性似乎也非常容易:
公共可查询MyQuriableEntitySet
{
获取{return implementationWithoutSecurity.MyQuriableEntitySet.Where(e=>e.Country.Code=currentUser.AssignedTo.CountryCode | | currentUser.IsSuperAdmin);}
}
太好了:)更多阅读。他们说印刷业正在消亡,但我不敢苟同。当然有Kindle,但我更喜欢印刷品。
public class AuthorizationManager : ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
var resource = context.Resource.First().Value;
var action = context.Action.First().Value;
return Policies.Validate(resource, action);
}
}