获取 API 访问令牌
本指南说明如何通过 API 调用获取 ACP 平台访问令牌。适用于需要以编程方式访问平台 API 的场景。
目录
概述前提条件步骤步骤 1:获取登录元数据步骤 2:获取 Dex 请求 ID步骤 3:获取 RSA 公钥步骤 4:提交加密凭据并获取授权码步骤 5:使用授权码换取令牌完整示例Shell Script(curl)使用令牌重要说明概述
ACP 使用基于 Dex 的 OIDC 身份验证系统。登录流程遵循 OAuth 2.0 Authorization Code Flow,由五次 API 调用组成,且必须在同一个 HTTP 会话内完成(共享 cookie)。
整个流程必须使用同一个 HTTP 会话(共享 cookie jar)。第 2 步会设置 cpaas_oidc_auth_flow 会话 cookie,第 5 步需要该 cookie 才能签发令牌。没有此 cookie 时,第 5 步会返回 invalid authentication session。
前提条件
步骤
步骤 1:获取登录元数据
请求:
查询参数:
响应(200 OK):
auth_url 中的 code_challenge 及相关参数由服务端生成,用于 server-to-Dex PKCE 交换,并存储在 cpaas_oidc_auth_flow cookie 中。你无需解析这些参数。在第 2 步中,请原样传递 auth_url 中的完整查询字符串。
步骤 2:获取 Dex 请求 ID
使用第 1 步返回的 auth_url 中的查询参数。
此步骤会设置 cpaas_oidc_auth_flow 会话 cookie。后续所有请求都必须携带该 cookie。
请求:
其中 {query_from_auth_url} 是从第 1 步 auth_url 中提取出的完整查询字符串(原样传递):
响应(200 OK):
步骤 3:获取 RSA 公钥
请求:
响应(200 OK):
步骤 4:提交加密凭据并获取授权码
密码加密:
- 构造 JSON 载荷:
{"ts": "<第 3 步中的 ts>", "password": "<明文密码>"} - 使用 RSA 公钥和 PKCS#1 v1.5 填充方式加密 JSON 字节
- 对加密结果进行 Base64 编码(标准编码,不是 URL-safe)
请求:
路径参数:
查询参数:
请求体:
响应(200 OK):
从 redirect_url 中提取 code 和 state 参数,供第 5 步使用。
步骤 5:使用授权码换取令牌
请求:
查询参数:
响应(200 OK):
完整示例
Shell Script(curl)
curl 通过 -c(写入 cookie)和 -b(读取 cookie)共享 cookie jar 文件来维护会话。
依赖项: curl、jq(JSON 解析)、openssl(RSA 加密)
用法:
使用令牌
在后续所有 API 请求的 Authorization 请求头中包含 access_token:
重要说明
-
必须共享会话 cookie:整个登录流程必须使用同一个 HTTP 会话(共享 cookie jar),以便
cpaas_oidc_auth_flowcookie 能够在每一步自动传递。没有此 cookie 时,第 5 步会返回invalid authentication session (400)。 -
ts时间戳不能重复使用:第 3 步返回的ts对每次请求都是唯一的。加密前必须将其与密码组合成 JSON 载荷。重复使用之前的ts值会导致第 4 步认证失败。 -
选择
IDP参数:local:ACP 本地账户(默认)ldap:LDAP/AD 域账户;具体 ID 取决于你的平台配置
-
TLS 证书验证:示例脚本中的
-k参数会跳过证书验证。仅适用于使用自签名证书的测试环境。在生产环境中,请移除-k,并配置有效的 CA 证书,或将平台 CA 添加到系统信任存储中。