令牌端点
POST/openapi/v1/oauth/token
换取授权码、刷新令牌,或获取服务端对服务端访问令牌。
支持三种 grant_type:
| grant_type | 使用场景 | 是否签发 refresh_token |
|---|---|---|
authorization_code | 用户授权后,用 auth_code 换取令牌 | ✅ 是 |
refresh_token | 使用 refresh_token 刷新过期的 access_token | ✅ 是(旧 refresh_token 立即失效) |
client_credentials | 服务端对服务端,无需用户参与 | ❌ 否 |
滚动刷新: 每次使用
refresh_token后,都会签发新的refresh_token,旧值立即失效。请务必保存最新值。
请求参数
Body 请求体
application/x-www-form-urlencodedgrant_type必填string
authorization_coderefresh_tokenclient_credentials
code选填string
`redirect_uri` 回调中返回的授权码,有效期 **10 分钟**,且只能使用一次。
code_verifier选填string
发起授权前生成的 PKCE 原始随机串。服务端校验 `base64url(SHA-256(code_verifier)) == code_challenge`。
client_id必填string
应用的 `client_id`。
client_secret必填string(password)
机密客户端必填;公开客户端无需传入。控制台创建 App 时生成,仅展示一次,需妥善保管。
redirect_uri选填string
须与发起授权时传入的 `redirect_uri` 精确一致。
refresh_token选填string
当前有效的 refresh_token。
scope选填string
space_id选填string
操作所在的 Space(租户)ID,该应用须已在此 Space 中安装。
请求示例
"grant_type=authorization_code&code=AC_aBcDeFgHiJkLmNoP&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk&client_id=SGCLxQk2mN8pR4vW1yH3jT5bZ6aE7cF0&client_secret=Kj3mN8pR4vW1xZ6bY2qT5hE9gA0cF7dLsUr4Qz8P&redirect_uri=myapp%3A%2F%2Foauth-callback"响应参数
Response.Data
access_token必填string
JWT 访问令牌,有效期 1 小时。
token_type必填string
固定为 `Bearer`。
Bearer
expires_in必填integer
访问令牌有效期(秒)。
refresh_token选填string
刷新令牌,永久有效。采用滚动刷新机制 — 每次使用后签发新 `refresh_token`,旧值立即失效。请立即保存新值。
scope选填string
实际授予的权限范围。
响应示例
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "RT_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
"scope": "envelope:create envelope:read"
}错误码
| HTTP 状态码 | 错误码 | 说明 |
|---|---|---|
| 400 | invalid_request | 缺少必填参数 |
| 400 | invalid_grant | 授权码已过期或已使用 |
| 400 | invalid_grant | PKCE 验证失败 |
| 400 | invalid_grant | refresh_token 无效或已被轮换 |
| 400 | invalid_scope | 请求的 scope 超出已授权范围 |
| 400 | unsupported_grant_type | 不支持的 grant_type |
| 401 | invalid_client | client_secret 错误 |
| 401 | invalid_client | 客户端不存在或已被停用 |
| 500 | server_error | 服务端内部错误。 |