.net - 限制对记录的访问。基于声明的权限是个好主意吗

标签 .net security authentication permissions claims-based-identity

在 .net 基于声明的身份框架中

如果我想限制用户对某个帐户执行操作(查看或编辑),例如一个特定帐户 #123456。(我指的是商业实体,例如银行帐户。)创建 claim 是个好主意吗?对于他们可以查看或编辑的每个帐户?

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

最佳答案

大声明集的最直接后果是性能降低,因为 token 在网络上的所有相关系统之间来回交换。例如,默认情况下,WIF 会序列化 token 并将它们放入 cookie。因此,在实践中,您可以存储的数据量也受到限制。有其他方法可以解决这个问题,但潜在的问题仍然存在。

第二个考虑因素是您将在谁和何处管理用户和帐户之间的关联。如果这是特定于应用程序的事情,则不太可能将这些关联推送到中央 STS( claim 发布者)。然后你将得到 2 个 STS:一个识别用户(和身份提供者:IdP)和一个特定于应用程序的 STS,它将把 IdP 发出的 token 转换成应用程序所理解的东西(包括特定用户的帐户列表)

话虽如此,可能用户和他的帐户之间的关联是可以在许多应用程序中重复使用的东西,那么将其放在专门的 STS 后面可能是有意义的。

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

作为一般准则,声明更适合“粗粒度”属性。 “细粒度”访问控制可能在应用程序内部处理得更好,您可以在其中使用基础架构优化。

这是一个极端的例子:想象一个文件系统。您是否会将用户有权访问的文件的名称编码为声明?不太可能,因为你最终可能会得到数百万……

另一个极端的例子:如果你想在数据库中实现行级安全。您是否会将每个用户的 row_id 编码为声明?不太可能,因为可能有很多,它是非常特定于应用程序的,还因为使用数据库查询解决行过滤可能更容易(而且效率更高)(这是基础设施优化的一个例子)

关于.net - 限制对记录的访问。基于声明的权限是个好主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2979034/

相关文章:

python - 具有 readWrite 的 mongoengine 用户无法创建索引

apache - 有没有办法在 apache 日志中获取内容长度(响应 header )?

c# - 适用于 .net 的 Foursquare SDK

asp.net - SQLDataSource 控制参数中的应用程序变量

security - 幸运十三这个名字的含义是什么?

mysql - 如何从删除或损坏敏感数据的 mysql 中转储数据库?

.net - 如何配置 NHibernate 以使用 MS SQL 2016 (RTM)?

.net - 如何将环境变量 'DOTNET_CLI_HOME' 添加到 .Net Systemd 服务?

security - 你怎么知道公共(public) Docker 镜像是安全的?

security - 将 session 存储在加密的 cookie 中