Keycloak中两个客户端如何完成身份认证以跨API访问受保护端点
问题解答结论
你提出的方案完全可行,该场景属于服务到服务调用的标准认证场景,使用*OAuth2 客户端凭证流(Client Credentials Flow)*即可实现,无需走普通用户绑定的身份认证流程。
具体实现配置步骤
- 首先配置client2的受众校验规则:在Keycloak的client2配置页,将client1添加到client2的允许访问列表,或者在client1的客户端作用域中自定义
aud(受众)声明,值设置为client2,确保client1申请的令牌可以被client2正常校验通过。 - 其次配置API2受保护端点的权限规则:仅放行满足以下条件的请求:携带的JWT令牌有效、
azp(授权方)字段值为client1、aud(受众)字段包含client2。 - 然后API1申请令牌时调用Keycloak的令牌端点,使用客户端凭证流发起请求,示例请求参数如下:
POST /realms/<你的realm名>/protocol/openid-connect/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=client1&client_secret=<client1的密钥>
- 最后API1拿到返回的
access_token后,将其放在请求头Authorization: Bearer <令牌值>中,发起对API2受保护端点的调用即可。
补充说明
客户端凭证流颁发的令牌本身就代表客户端(也就是你的API1服务)的合法身份,和普通用户令牌的校验逻辑完全一致,你不需要额外改造API2现有的令牌校验逻辑,只需要加一层
azp字段的校验规则就能实现权限隔离。
内容的提问来源于stack exchange,提问作者cseccia
相关产品推荐
相关产品推荐

