令牌端点

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,旧值立即失效。请务必保存最新值。


请求参数

application/x-www-form-urlencoded
grant_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"

响应参数

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 状态码错误码说明
400invalid_request缺少必填参数
400invalid_grant授权码已过期或已使用
400invalid_grantPKCE 验证失败
400invalid_grantrefresh_token 无效或已被轮换
400invalid_scope请求的 scope 超出已授权范围
400unsupported_grant_type不支持的 grant_type
401invalid_clientclient_secret 错误
401invalid_client客户端不存在或已被停用
500server_error服务端内部错误。