ASP.NET标识中angular色与声明的最佳实践

我对使用ASP.NETIdentityclaims是完全ASP.NETIdentity并希望了解使用Roles and/or Claims的最佳做法。

毕竟这个阅读,我仍然有像…

问:我们不再使用angular色吗?
问:如果是这样,为什么angular色仍然提供?
问:我们是否应该只使用索赔?
问:我们应该一起使用angular色和索赔吗?

我最初的想法是我们“应该”一起使用它们。 我将Claims视为他们支持的Roles子类别。

例如:
作用:会计
声明 :CanUpdateLedger,CanOnlyReadLedger,CanDeleteFromLedger

问:他们是否打算互相排斥?
问:或者仅仅是要求索赔和“完全符合”你要求赔偿?
问:那么这里的最佳做法是什么?

示例:一起使用angular色和声明
当然,你将不得不为此编写自己的属性逻辑…

 [Authorize(Roles="Accounting")] [ClaimAuthorize(Permission="CanUpdateLedger")] public ActionResult CreateAsset(Asset entity) { // Do stuff here return View(); } 

示例:完全符合您的声明

 [ClaimAuthorize(Permission="Accounting.Ledger.CanUpdate")] public ActionResult CreateAsset(Asset entity) { // Do stuff here return View(); } 

angular色是一个象征性的类别,它将共享相同级别的安全特权的用户聚集在一起。 基于angular色的授权需要首先识别用户,然后确定用户分配的angular色,最后将这些angular色与授权访问资源的angular色进行比较。

相比之下,索赔是用户识别自己的权利。 换句话说,“我被允许这样做,因为我有这个索赔。” 一般来说,基于声明的授权包含基于angular色的授权。 准确地说,angular色成员是基于身份确定的,而身份只是权利要求的一种权利。 angular色本质上是一种非常特殊的主张,即“因为我的用户名是这个,所以我是这个angular色的成员,因为我是这个angular色的成员,所以我可以访问这个资源。”

可以一起使用,或者在一些情况下使用一种types,而在其他情况下使用另一种types。 它主要取决于与其他系统的互操作性和您的pipe理策略。 例如,pipe理员可能更容易pipe理分配给某个angular色的用户列表,而不是pipe理分配了特定“索赔”的人员。 在RESTful场景中,声明可能非常有用,您可以将声明指定给客户端,然后客户端可以提交授权请求,而不是为每个请求传递用户名和密码。

正如@克莱斯完美地解释,声称可能是一个更具描述性和深层次的angular色。 我认为他们是你的angular色IDS。 我有一个健身房ID,所以我属于成员angular色。 我也在跆拳道课程,所以我有他们的要求,跆拳道ID。 我的申请需要申报一个新的angular色以适应我的会员权利。 相反,我可以在健身房做的每一件特别的事情,而不是许多新的会员types。 这就是为什么索赔更适合我。

巴里·多兰斯有一个很好的解释video,谈到使用索赔而不是angular色的优势。 他还表示,为了向后兼容,angular色仍然在.NET中。 该video是非常丰富的索赔,angular色,政策,授权和身份validation作品的方式。

你可以在这里find它: 与Barr Dorrans的ASP.NET核心授权

PS。 对不起,我的英文语法。