在.NET基于索赔的身份框架

如果我想限制用户在帐户上进行操作(查看或编辑),那么一个特定的帐户#123456。(我说的是业务实体,例如银行帐户。)创建索赔是一个好主意对于他们可以查看或编辑的每个帐户?

在集合中有很多索赔的缺点吗?系统管理员可能可以访问系统中的所有帐户,从而创建数百个索赔(每个帐户可能不止一个)

有帮助吗?

解决方案

大索赔集的最直接后果是较低的性能,因为在整个网络的所有相关系统之间来回交换令牌。默认情况下,wif,例如,将令牌序列化并将其放入cookie中。因此,在实践中,您也可以在此处存储的数据量受到限制。还有其他处理此问题的方法,但是潜在的问题仍然存在。

第二个考虑因素是您和在哪里管理用户与帐户之间的关联。如果这是特定申请的事情,那么您不太可能将这些关联推向中央STS(索赔的发行人)。然后,您将获得2个sts:标识用户(以及身份提供商:IDP)和一个特定于应用程序的STS的STS,该STS将将IDP发出的令牌转换为应用程序所承担的东西(包括特定用户的帐户列表)

话虽如此,可能是在许多应用程序中可以重复使用的用户及其帐户的协会可能是有意义的,因此将其放在专业的STS落后是有意义的。

有第三个考虑因素是潜在的信息披露。该应用程序可能只需要知道用户X是否可以访问帐户123。通过提供所有帐户列表,用户X可以访问您的列表正在披露所需的更多信息。

作为一般指南,对于“粗粒子”属性更好。在应用程序中,您可以在其中使用基础架构优化的“细粒度”访问控件可以更好地处理。

这是一个极端的例子:想象一个文件系统。您会按声明用户可以访问的文件的名称进行编码?不太可能,因为您可能最终会达到数百万...

另一个极端示例:如果您想在数据库中实现行级安全性。您会为每个用户的ROW_ID声称编码吗?再次不可能,因为可能有很多,它是非常具体的,并且因为使用数据库查询求解行过滤可能更容易(并且效率更高)(这是基础结构优化的一个示例)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top