我如何隔离客户端访问和密钥斗篷配置

时间:2020-03-05 11:27:09

标签: spring-boot keycloak

如果我有多个客户端,我将如何隔离客户端访问。 我试图实现的是发出的访问令牌应仅对预期的服务有效。 例。如果我有两个客户端client1和client2,则颁发给client1的令牌应该不能从client2访问资源,因为我的设置允许这两个客户端访问类型都设置为机密。并且JWT令牌确实包含client_id(即“ aud”)字段,但这在身份验证阶段不会进行评估。

1 个答案:

答案 0 :(得分:0)

有多种方法可以实现。我将使用的方法是在每个客户端中定义一个角色,用户必须访问该角色。然后,您将在允许访问该客户端之前检查他们是否具有该客户端角色。

要创建客户端角色,请在管理控制台中选择“领域”,然后从左侧菜单中选择“客户端” =>选择“ client2” =>选择“角色” =>“添加角色”,并命名无论您想要什么。说“管理员”。

要向用户授予该角色以便他们可以访问该客户端,请转到“用户” =>选择您的用户=>角色映射=>在“客户端角色”部分下,选择您的客户端=>选择新角色并分配它给用户。

然后,您需要通过转到“客户端” =>“客户端1” =>“范围标签” =>取消选中“允许完整范围” =>从“客户端角色”中选择“客户端2”,来限制来自客户端1的范围访问”,并确保该角色未应用于此客户端。

您现在可以通过转到“客户端” =>“客户端1” =>“客户端范围” =>“评估选项卡”,测试该用户是否可以通过登录“客户端1”来访问此角色。如果客户端作用域配置正确,则您不应获得对客户端2角色的访问权限。

难题的最后一步是配置客户端以检查此角色。在您的后端API(或其他客户端实施位置)上,配置密钥斗篷以防止针对该客户端的新创建的客户端角色。例如,如果您的API是用Node编写的,则可以使用Keycloak Node适配器,将其设置为“客户端2” app.get( '/special', keycloak.protect('admin'), specialHandler );

有关使用适配器进行保护的更多信息,请参见:https://www.keycloak.org/docs/latest/securing_apps/#_nodejs_adapter

相关问题