我有一个mvc / web api网站,并且正在实施基于声明的身份验证/授权。
我开始从AuthorizeAttribute派生出一些自定义身份验证需求(包括向AuthorizeAttribute的构造函数添加几个属性)
然后我认识到最新的.net正在引用ClaimsPrinciplePermission属性。我已经读过你无法从中派生customClaimsPrinciplePermission属性。除此之外,为什么会使用一个属性而不是另一个?
THX
答案 0 :(得分:1)
首先,一点背景知识:
AuthorizeAttribute属性类特定于Mvc,而ClaimsPrincipalPermission属性类是以前称为Windows Identity Foundation的一部分,现在已将其包含在.NET Framework中。 MS提倡WIF作为将业务逻辑与授权逻辑分离的事实标准。 WIF本身是经典认证/授权方案(IIdentity,IPrincipal)与WCF提出的声明概念的合并。新的实现分别是ClaimsIdentity和ClaimsPrincipal,它们添加了声明功能,但仍然从旧接口派生,以实现兼容性。
回答:
AuthorizeAttribute类主要针对旧的基本IPrincipal接口,而ClaimsPrincipalPermission属性使用新工具。然而,最大的区别是ClaimsPrincipalPermission抛出SecurityException类型的异常,由于显而易见的原因,它不是非常理想或可测试的。
Dominick Baier写了一篇关于他解决这个缺点的非常好的文章:
http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
以下是关于StackOverflow的类似讨论: