2014-02-24 40 views
0

我试图在ASP.NET MVC应用程序中实现基于声明的安全性。我计划使用ClaimsPrincipalPermission类来验证基于资源/操作对的访问。在WIF中实现自定义声明的正确方法是什么?

例如

[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Read", Resource="Invoices")] 
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Create", Resource="Fees")] 

所以现在我需要自定义声明来验证我的操作/资源对。我有不同的资源,所有这些资源都有CRUD操作。

这就是我心目中的定制要求:每个资源

((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/invoices", "Read")); 

 ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Create")); 
     ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Read")); 

因此,基本上,一个要求类型和要求值可以被读取的组合/创建/更新/删除。这是对使用CRUD权限的系统实施定制声明的正确方法吗?我应该以不同的方式做吗?

谢谢!

回答

0

通常用户的声明建模他们的身份(用户名,电子邮件,角色等),而不一定是他们拥有什么权限。在声明授权管理器中,您可以根据用户的身份和所访问的资源的权限进行数据库查找,然后生成授权结果。

另外,如果你是在Web应用程序中执行此操作,则会出现内置的ClaimsPrincipalPermission恶臭类型,因为它会引发异常,而您在Web应用程序中真正想要的是401,所以您可能会考虑ResourceActionAuthorizeAttribute在Thinktecture IdentityModel帮助程序库中有:https://github.com/thinktecture/Thinktecture.IdentityModel

+1

看来被引用的项目已被弃用。你对MVC5/.net 4.6.1推荐什么方法? – user210757

相关问题