使用 Keycloak 授权 M2M 请求
Keycloak 可以向与机密 OIDC 客户端关联的服务账号签发访问 Token。后台服务、定时任务、命令行工具和自动化程序可以使用这些 Token 调用 API,而无需最终用户登录。
OAuth 2.0 客户端凭证授权专为这类机器到机器(M2M)通信设计。Apache APISIX 可以在代理请求之前验证每个 Token 的签名、签发者、受众和已授予作用域,从而保护目标 API。
本指南使用一个 Keycloak 客户端表示由 APISIX 保护的 API,另一个服务账号客户端表示调用服务。服务账号会获得一个客户端作用域,并请求受众标识为受保护 API 的访问 Token。APISIX 会验证这两项限制,并在将请求转发到示例上游之前移除身份认证数据。主要配置使用 Keycloak 的 JSON Web Key Set(JWKS)在本地验证 Token;备选配置则使用 Keycloak 的 Token 内省端点。
前置条件
- 安装 Docker。
- 安装 cURL 和 jq。
- 按照快速入门教程,使用 Docker 启动 APISIX。
- 如果计划使用 ADC,请先安装并配置 ADC。
- 如果使用 Admin API 示例且启用了身份验证,请将管理员角色的密钥导出为
ADMIN_API_KEY。请在deployment.admin.admin_key下配置该密钥。Docker 快速入门为了便于本地评估而禁用了身份验证;生产环境中请保持启用。
配置 Keycloak
启动本地 Keycloak 服务器,然后创建 Realm、受保护 API 客户端、客户端作用域和用于 M2M 授权的服务账号客户端。
启动 Keycloak
如果已通过设置 Keycloak 单点登录准备好 Keycloak 和 quickstart-realm,请复用它们并继续创建 API 作用域。
否则,请使用临时管理员账号以开发模式启动 Keycloak:
docker run -d --name apisix-keycloak \
-e 'KC_BOOTSTRAP_ADMIN_USERNAME=quickstart-admin' \
-e 'KC_BOOTSTRAP_ADMIN_PASSWORD=quickstart-admin-pass' \
-p 8080:8080 \
quay.io/keycloak/keycloak:26.7.3 start-dev
开发模式和示例凭证仅用于本地测试。生产部署应使用 HTTPS、生产数据库和永久管理员账号。
打开 http://localhost:8080/admin/,使用管理员用户名 quickstart-admin 和密码 quickstart-admin-pass 登录。
创建 Realm
为本指南创建一个隔离的 Realm:
- 选择 Manage realms → Create realm。
- 输入
quickstart-realm作为 Realm 名称。 - 选择 Create。

创建 API 作用域
创建 APISIX 将要求 M2M 访问 Token 包含的作用域:
- 选择 Client scopes → Create client scope。
- 输入
apisix.read作为名称,并保持 Protocol 为 OpenID Connect。 - 开启 Include in token scope,然后选择 Save。
创建受保护 API 客户端
创建一个表示 APISIX 所保护 API 的机密客户端:
- 选择 Clients → Create client。
- 保持 Client type 为 OpenID Connect,输入
apisix-protected-api作为客户端 ID,然后选择 Next。 - 开启 Client authentication。关闭所有身份认证流程,然后选择 Save。
APISIX 使用此客户端 ID 作为预期 Token 受众。只有可选的 Token 内省配置需要客户端密钥。