我正在使用客户端凭据流进行服务到服务的身份验证。我使用密钥斗篷作为授权服务器。
比方说,有两个服务S1和S2。
每个服务都将只允许某些其他服务调用其API。也可能发生一个服务的两个不同API可能允许不同的调用者集。
我已经创建了角色。我已经创建了范围并将角色映射到范围。当我在获取令牌调用(/realms/realm_name/Protocol/openid-connect/token)中传递范围时,我正在获取具有映射到传递范围的角色的令牌。
我无法弄清楚的是如何限制不同角色对不同服务的分配?
只有服务所有者或管理员才能登录keyCloak,并且应该能够将与他/她的服务对应的角色分配给其他服务。他不应该对不适合他的服务的角色做任何事情。
S1的所有者是O1(一个用户)。S1有三个API A1、A2和A3。要调用A1API,调用者应该具有R1角色,要调用A2API,调用者应该具有R2角色。
现在,如果服务S2想要调用S1的APIA1,只有管理员或用户O1应该能够在密钥斗篷中将角色R1附加到S2的客户端(或将角色R1添加到附加到服务客户端S2的范围)。这可能与在密钥斗篷中执行不同操作的受限访问有关。
如果我正确理解了您的请求,您可以尝试使用客户端更精细的权限。使用以下标志运行keyCloak:
-Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
然后在您的客户端中,您可以选择哪个用户可以对客户端做什么:
例如,您可以在权限视图上的客户端,然后根据用户创建策略,然后相应地配置其余部分。
您可以在KeyCloak官方留档中阅读有关管理策略的更多信息。