当前位置: 首页 > 知识库问答 >
问题:

是否可以使用Keyclaock处理多个团队的用户授权?

戚阳文
2023-03-14

我对keycloak不熟悉,对它没有深入的了解。我们必须在Spring Boot中为一个应用程序实现身份验证,其中有团队,用户可以是不同团队的一部分。他/用户可以为每个团队拥有不同的角色/权限。例如,用户A可以是team1的经理,同时,他可以是team2的管理员,等等。

我以一种为每个团队提供一个钥匙斗篷客户端的方式实现了它。客户端角色将作为团队权限分配给用户。

现在,我想以这样一种方式限制API,即只有对team1拥有某些权限(分配了角色)的用户才能访问特定团队(在本例中为team1)的数据。我知道我们在Spring Boot有@PreAuthroize注释,我可以在其中添加一个对“hasRole”的检查,但这还不够。它将简单地检查当前用户是否有这个角色,但我想知道这个用户在像team1或其他一些团队中有这个角色吗?

我可以通过keycount管理API获取特定客户机的用户角色,并手动检查代码中是否存在分配的角色中的角色。请参阅下面的代码:

Keycloak keycloak = keycloakClient.getInstance();
List<String> availableRoles = keycloak.realm(realm).users().get(user).roles().clientLevel(client).
                listAvailable().stream().map(role -> role.getName()).collect(Collectors.toList());
if (availableRoles.contains(Roles.TEAM_MANAGER.name())) {
    return true;
}

但我不确定这是不是正确的方法。

另一种选择可能是不使用 keycloak 进行授权(仅将其用于身份验证),并在数据库表中具有这些角色,并从数据库中验证用户是否具有所需的角色。

正如我已经提到的,我没有太多的经验,所以任何人都可以建议什么是正确的方式吗?

共有1个答案

刘琨
2023-03-14

你可以看看我写的这个高级教程

它没有回答你非常具体的用例,但它实现了类似的东西:编写Spring安全规则,用户可以代表其他用户(而不是你需要的团队)做事。

如果您使用Keycloak适配器将Keycloak角色映射到spring权限,不要这样做,这是不推荐的。

 类似资料:
  • 问题内容: 我正在使用python 2.7,并尝试在自己的进程中运行一些CPU繁重的任务。我希望能够将消息发送回父流程,以使其随时了解流程的当前状态。为此,多处理队列似乎很完美,但我不知道如何使它工作。 因此,这是我的基本工作示例,减去了Queue的使用。 我尝试以几种方式传递队列,它们收到错误消息“ RuntimeError:队列对象仅应通过继承在进程之间共享”。这是我根据之前发现的答案尝试的一

  • 我的问题是,如果我们有两个原始事件流,即烟雾和温度,并且我们想通过将运算符应用于原始流来找出复杂事件(即火灾)是否发生,我们可以在Flink中做到这一点吗? 我问这个问题是因为到目前为止,我所看到的Flink CEP的所有示例都只包括一个输入流。如果我错了,请纠正我。

  • 我有几份产品数据表。每个文件都是一个单独的文件。我想做的是使用iText根据Web表单的答案生成一组摘要/建议的操作,然后将所有相关的数据表附加到这些操作中。这样,我只需要在浏览器中打开一个新选项卡来打印所有信息,而不是为摘要打开一个选项卡,为所需的每个数据表打开一个选项卡。 那么,使用iText可以做到这一点吗?

  • 问题内容: 我尝试使用achartengine向堆叠条形图的演示示例中添加另一组值,但我引入的新值未出现在图表上。堆叠杆是否限于两根? 问题答案: AChartEngine显示堆叠的条形图的方式存在误解。它并没有真正堆叠它们,而是将它们显示为一个。这意味着您将总是要先添加较大的值,然后再添加较小的值,依此类推,因为它呈现第一个序列,第二个序列位于第一个序列之上,依此类推。 更新:从1.2.0版开始

  • 问题内容: 在所有任务中,我有一些必须按顺序处理(它们永远不能同时运行,必须按顺序处理)。 我实现了为必须串行执行的每组任务创建一个具有单个线程的独立线程池的功能。它有效,但我没有足够的资源。我无法控制组的数量,因此最终可能会产生大量同时运行的线程。 有什么办法可以通过单个线程池完成此任务?是否有一个带有多个阻塞队列的线程池,我可以确保每个队列的串行执行? 编辑: 只是强调我在第二段中所说的:我已

  • 我正在使用一个相当大的数据集(大约500Mio-Triples)存储在图形数据库免费并在我的本地开发人员机器上运行。 我想用RDF4J对数据集执行一些操作,并且必须或多或少地选择整个数据集。要进行测试,我只需选择所需的元组。代码在第一个一百万元组中运行良好,之后由于graphDB继续分配更多的RAM,速度变得非常慢。 是否有可能对非常大的数据集执行选择查询并批量获取它们? 基本上,我只想通过一些选