ClaimsPrincipalPermission和AuthorizeAttribute有什么区别?

时间:2016-01-13 00:46:12

标签: c# asp.net-mvc asp.net-web-api claims-based-identity

我有一个mvc / web api网站,并且正在实施基于声明的身份验证/授权。

我开始从AuthorizeAttribute派生出一些自定义身份验证需求(包括向AuthorizeAttribute的构造函数添加几个属性)

然后我认识到最新的.net正在引用ClaimsPrinciplePermission属性。我已经读过你无法从中派生customClaimsPrinciplePermission属性。除此之外,为什么会使用一个属性而不是另一个?

THX

1 个答案:

答案 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的类似讨论:

MVC5 Claims version of the Authorize attribute