哪些数据应存储为“声明”?


9

在ASP.Net Core中,我发现Claims授权不是很具体的方法。我们可以添加任何东西作为ClaimTypeClaimValue配对;组,名字,姓氏,生日,canAccessThisURI,isEditor等。但是,这种方法(存储可以存储为声明的任何内容)将构成一个巨大的声明表,其中包含50%的应用程序数据。

我想知道,作为一种好的做法,应将哪些常见数据存储为索赔?


4
您将在此处存储所需的任何数据,以验证/授权用户。那几乎可以肯定包括您的应用程序数据的50%。
罗伯特·哈维

Answers:


3

声明只是有关用户的事实,可以用来识别授权系统中的某人。这两个约束应该足以限制您提出的索赔要求。

有关索赔的一些想法包括:

  • 用户身份
  • 用户名
  • 用户电子邮件
  • 角色
  • 团体会员

用户的元数据应限于为用户个性化应用程序并将用户与其数据关联所需的内容。用户的ID足以将用户与数据相关联或提供审核跟踪。不要贪心。

角色和组成员身份是授权声明。例如,如果您的应用程序中有组,则用户所属的组列表可让您快速检查他们是否可以访问私人组。角色更精细一些,可以说明用户拥有哪些特权。这些通常是特定于应用程序的,因此仅添加您需要执行的内容。


0

有许多系统以这种方式执行此操作,尤其是STS /联邦系统:

  • 一条描述用户的声明
  • 描述他们(和其他人)可以访问的一般概念性事物的各种索赔

应用内用户的“个人资料”数据可能不会转换为您正在使用的身份验证源,也可能不会一直使用相同的终结点或所有用户。

如果您熟悉旧的Forms身份验证,则类似于用户名和角色模型,并且如果适当地使用名称和角色的System.Security.Claims.ClaimTypes,则很多内置东西仍然看起来像这样。

新旧模型都无法为您提供很多关于索赔或角色继承的现成方法,但这并不是很难实现的,并且实现它可以减少您在请求中不起作用的索赔或角色的数量。请求。

如果您的应用程序需要跟踪生日,但是不需要在安全机制中使用它,那么将其保留在索赔集合中实际上没有任何好处。将其放在单独的配置文件数据集中。

如果您的应用程序需要从另一个系统获取生日作为声明,那么您正在寻找的东西更多,例如自定义federatedAuthentication或允许额外的声明继续存在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.