Ale*_*afi 6 security authorization roles usergroups keycloak
我有一个使用 Keycloak 保护的 Web 应用程序。为了使服务描述简短,我们将用户和文档作为服务中的实体。用户可能无权访问任何文档或访问多个文档,并且可以编辑或阅读该文档。
目前我们有管理员、最终用户、开发人员等角色。然后,我们在 Keycloak 外部保留一个数据库表,该表将文档映射到用户以及哪个用户对哪个文档具有什么访问级别。我们所有的最终用户在 Keycloak 中都具有 EndUser 角色。每次最终用户尝试读取/编辑文档时,我们都必须在数据库表中进行查找以获取授权。
我们想将该表迁移到 Keycloak。据我了解,我基本上有两种选择:
创建很多角色,每个文档两个角色,名称如doc_read_[DOCUMENT-ID]和doc_edit_[DOCUMENT-ID]等等。然后将正确的角色分配给正确的用户。这里的缺点是角色的数量将会增加很多。此外,附加到用户的角色数量将非常大。
为每个文档创建一个组,名称为文档 ID。有不同的读/写子组,然后将用户添加到正确的组中。缺点是组的数量会非常多。另外,我将依赖组名称的授权,因此组名称列表必须映射到令牌。
我不想为每个用户添加带有文档 ID 的用户属性。通过这种方法,我无法获得文档的概述并查看哪些用户可以访问给定文档。
这里的最佳实践是什么?还有其他解决方案可以解决这个问题吗?这一定是一个非常常见的设置。
这只是我的看法。
据我了解,这两种解决方案都不是最佳的,为每个文档添加一个角色是不自然的,而且粒度太细。正如您已经提到的,这会导致角色过多,您可能必须将它们添加到令牌中。
我个人会使用 Keycloak 仅用于身份验证部分,并在后端执行授权部分。我还会尝试以反映允许哪些用户角色操作它们的方式对文档进行分组。
或者,您可以尝试使用 Keycloak 的授权功能来处理该用例,但我从未使用过它,因此我对这个选项没什么可说的。