Keycloak,客户端之间共享资源

Yer*_*yan 5 authorization oauth-2.0 openid-connect microservices keycloak

我们正在开发一个具有基于微服务架构的应用程序,其中用户可以是组织的成员,并且在每个组织内,他们可能具有基于资源的访问限制。例如,一位招聘人员是该平台上多个组织的成员;在组织A中,他们可以看到所有职位发布和面试官的列表,而在组织B中,他们只能看到直接允许他们查看的职位发布。

就结构而言,这变成了这样: 在此输入图像描述

所有这一切似乎都可以通过 Keycloak 轻松完成,我们创建机密客户端(每个微服务一个)并对它们启用资源管理。然而,在很多情况下,不同的微服务(即Keycloak客户端)需要验证用户对同一资源的访问范围。一个例子是这样的设置,我们有 2 个微服务,一个用于发布和管理职位公告,另一个用于管理申请和面试,即job-managerapplication-manager。现在,当提交新的申请或面试官尝试访问应用程序时,应用程序经理必须确保用户有权访问在职位经理Keycloak 客户端中配置的职位发布(资源)。我认为 Keycloak 不支持这一点。

就规模而言,我们谈论的是 X00k 用户、组织用户连接数的 4-5 倍以及数千万资源。因此,为了最大限度地减少我们在 Keycloak 中创建的对象数量,我们决定在存储 JSON 结构的资源上使用属性。

那么,一个微服务如何验证用户对另一个微服务对资源管理器的访问?

Tza*_*ahi 1

尝试启用细粒度授权: https://www.keycloak.org/docs/latest/authorization_services/#_resource_server_enable_authorization

这允许基于资源的授权。该资源不一定是您拥有的每个资源,而是像 org_manager 等这样的抽象...

或者,您可以使用已有的 json 并使用您定义的策略询问 OPA 代理。

https://www.openpolicyagent.org/