【发布时间】:2021-05-26 23:20:41
【问题描述】:
我有一个使用 Keycloak 保护的 Web 应用程序。为了使服务的描述简短,我们将用户和文档作为服务中的实体。用户可以访问一个或多个文档,并且可以编辑或阅读文档。
目前我们拥有诸如管理员、最终用户、开发人员等角色。然后,我们在 Keycloak 之外保留一个数据库表,用于将文档映射到用户以及哪些用户对哪些文档具有什么访问级别。我们所有的最终用户在 Keycloak 中都有 EndUser 角色。每次最终用户尝试读取/编辑文档时,我们都必须在数据库表中进行查找以进行授权。
我们想将该表迁移到 Keycloak。据我了解,我基本上有两种选择:
-
创建很多角色,每个文档两个,名称为
doc_read_[DOCUMENT-ID]和doc_edit_[DOCUMENT-ID]等。然后将正确的角色分配给正确的用户。这里的缺点是角色的数量会增加很多。此外,附加到用户的角色数量会非常多。 -
为每个文档创建一个组,名称为文档 ID。有不同的读/写子组,然后将用户添加到正确的组中。缺点是组的数量会非常大。另外,我将在组名上依赖授权,因此组名列表必须映射到令牌。
我不想为每个用户添加带有文档 ID 的用户属性。使用这种方法,我无法获得文档的概览,也无法查看哪些用户可以访问给定的文档。
这里的最佳做法是什么?有没有其他解决方案可以解决这个问题?这一定是很常见的设置。
【问题讨论】:
标签: security authorization keycloak roles usergroups