Asp.net mvc 4 使用基于声明的授权

Asp.net mvc 4 使用基于声明的授权,asp.net-mvc-4,authorization,asp.net-4.5,Asp.net Mvc 4,Authorization,Asp.net 4.5,新的ASP.NET 4.5代码已将ASP.NET角色提供程序“重新设置为”ClaimsProvider的父级 我想弄清楚的是,“基于声明”的授权示例会是什么样子(最好是在MVC4中)?我的Authorize属性如何与此功能交互?网络安全和角色API没有改变;没有“DoesUserHaveClaim()”签名。类似地,还不清楚Authorize属性如何与声明交互 这个“声明授权”功能主要是为OAuth设计的吗?如果是,如何将索赔转发给我的申请?饼干?或者,该索赔提供程序功能的用途是否更广泛 简而言

新的ASP.NET 4.5代码已将ASP.NET角色提供程序“重新设置为”ClaimsProvider的父级

我想弄清楚的是,“基于声明”的授权示例会是什么样子(最好是在MVC4中)?我的Authorize属性如何与此功能交互?网络安全和角色API没有改变;没有“DoesUserHaveClaim()”签名。类似地,还不清楚Authorize属性如何与声明交互

这个“声明授权”功能主要是为OAuth设计的吗?如果是,如何将索赔转发给我的申请?饼干?或者,该索赔提供程序功能的用途是否更广泛

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

我所见过的最接近某种意义的东西是。但我怀疑这是过时的——它应该与MVC4互联网项目模板产生的内容相比较。即使如此,它仍然没有建议如何在设置中使用Authorize属性

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

  • 解释WebSecurity、Roles和AuthorizeAttribute API实际上可以根据需要归结为声明检查
  • (与其他人一起)
  • 基本的

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

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


    <>您讨论的是Windows身份基础(WIF),它现在是.NET的4.5部分,也是为什么基于身份的身份是一流公民的原因。所有主要类型都继承自ClaimsPrincipal。有关基于声明的安全性的良好概述,请查看此免费电子书“”。这方面真正的专家是多米尼克·拜尔,他对这个话题充满了有用的信息。他还有一个关于Pluralsight的很棒的在线培训课程,名为“.”

    我不确定新模型是否真的让我的应用程序与安全性“少混淆”(我仍在修饰方法的属性),但它确实提供了更细粒度的控制。此外,ASP.NET角色管理器确实有一种将主体信息(即角色和可能的声明)存储在cookie中的方法——如果在配置中启用,则默认情况下是这样。最重要的是,感谢您提供的标记为“答案”的信息。尽管您仍在新模型中为方法添加属性,但您只是指示要操作的资源和操作类型,而不是特定于任何安全设计。旧模型让您考虑在添加属性时应该提供哪些角色,这对于您的安全设计来说非常具体。在新模型中,您可以更改用户的授权方式,而无需进入并更改这些属性。在ClaimsPrincipal中,用户名和角色是默认声明。这两种类型的声明自动存储在cookie中。但是,对于自定义声明,您需要进行一些自定义编码,以确保它们存储在cookie中。为了更新此答案,使用ASP.NET MVC 5,声明似乎会自动存储在cookie中。