37

新的 ASP.NET 4.5 代码已将 ASP.NET RoleProvider “重新设置为” ClaimsProvider。

我想弄清楚的是,“基于声明”的授权示例是什么样的(最好在 MVC4 中)?我的 Authorize 属性如何与此功能交互或不交互?WebSecurity 和 Roles API 没有改变;没有“DoesUserHaveClaim()”签名。同样,也不清楚 Authorize 属性如何与声明交互。

这个“声明授权”功能主要用于 OAuth 吗?如果是这样,如何将索赔转发给我的申请?一块饼干?或者这个声明提供者的功能是为了更广泛的用途?

简而言之,使用 ClaimsPrincipal 的故事是什么?

我所见过的最接近某种有意义的事情就是这个讨论。但我怀疑这已经过时了 - 它应该与 MVC4 互联网项目模板生成的内容进行比较。即便如此,它仍然没有建议如何在设置中使用 Authorize 属性。

更新

我从以下来源找到了我的问题的答案:

  1. ClaimsPrincipal 的备注部分解释说,WebSecurity、Roles 和 AuthorizeAttribute API 实际上归结为必要时的声明检查。
  2. 这里有一个基于声明的 MVC4 示例(以及其他示例)。
  3. 此处显示了基本的SAML 故事
4

1 回答 1

33

基于声明的安全性有助于将您的安全模型与应用程序域分离。声明可以是您想要附加到用户身份的任何内容,例如电子邮件、电话号码或指示用户是否为超级用户的标志。这为您提供了设置授权过程的最大灵活性。从历史上看,在 ASP.NET 应用程序中,您必须确定要允许的角色并在对应用程序进行编程时应用它们。然后检查用户是否具有授权他们的角色。这将您的安全模型与您的应用程序混合在一起。在基于索赔的情况下,您拥有更大的灵活性,并且更典型的是设置一个授权方案,该方案将资源(例如:订单管理系统中的订单)和操作(例如:读、写、执行)作为输入参数授权流程,有效地将安全性与您的应用程序分离。看ClaimsPrincipalPermissionAttribute以获取此技术的示例。

OAuth 需要基于声明的安全性,但它也适用于其他授权方案。您在应用程序中使用的自定义声明可从ClaimsPrincipal.Current访问。也有一些技术可以将此信息存储在 cookie 中,尽管 ASP.NET 安全管道默认情况下不这样做。

您引用的讨论是针对 Windows Identity Foundation (WIF),它现在是 4.5 中 .NET 的一部分,这就是为什么基于声明的身份是一等公民的原因。所有 Principal 类型都继承自 ClaimsPrincipal。要全面了解基于声明的安全性,请查看此免费电子书“基于声明的身份和访问控制指南(第 2 版) ”。该领域的真正专家是 Dominick Baier,他的博客充满了有关该主题的有用信息。他还有一个很棒的 Pluralsight 在线培训课程,名为“ ASP.NET 4.5 中的身份和访问控制”。

于 2012-11-19T19:45:33.790 回答