用户授权
通过用户授权,用户可以指定应用允许操作的业务资源和有效期限。本文介绍如何查询授权选项、创建授权、核验授权范围和撤销授权。
API 调用权限、用户同意和资源权限分别校验。创建授权不会购买商品或增加额度。
前提条件
创建、续期及核验前,先按接入入口与权限配置当前应用的用户身份与所需 API Scope,再完成授权码 + PKCE 登录。列表和撤销只要求有效的本人登录与当前企业关系,不要求管理权限、业务 Scope 或应用可用状态。每次调用携带用户 Bearer 和 X-GV-Organization-ID。用户必须属于当前客户企业;不使用应用身份 Token,也不在正文传入另一个用户或企业。
接口列表
| 接口 | 说明 |
|---|---|
GET /open-platform/v1/delegated-grant-options | 读取当前应用、当前用户 OAuth Client 可用的授权选项 |
GET /open-platform/v1/delegated-grants | 读取本人的授权;可按 status=active|revoked|expired 筛选 |
POST /open-platform/v1/delegated-grants | 创建或按版本更新本人授权 |
POST /open-platform/v1/delegated-grants/{id}:revoke | 使用当前版本撤销本人授权 |
POST /open-platform/v1/delegated-grants:authorize | 核验当前请求是否在有效授权范围内 |
这些共享接口不单独申请一个 API 产品。创建及核验授权时,Token、应用用户身份与 API 调用权限必须共同包含请求的业务 Scope。
查询选项并创建授权
curl --request GET \
--url "${GOODVISION_API_BASE}/open-platform/v1/delegated-grant-options?application_id=${GOODVISION_APPLICATION_ID}" \
--header "Authorization: Bearer ${GOODVISION_USER_ACCESS_TOKEN}" \
--header "X-GV-Organization-ID: ${GOODVISION_CUSTOMER_ORGANIZATION_ID}"响应的 items 包含可用的 application_id、application_name、environment、environment_binding_id、api_product_id、scopes 和 product_codes。选项来自当前应用、环境和 API 产品的有效权限。product_codes 只在存在真实商业资源时提供候选;空数组不代表用户已经授权,创建授权时仍须使用业务 Owner 确认的精确资源。
Client 与环境绑定由平台根据当前来源派生;创建和核验请求只提交应用、环境与 API 产品,不提交 OAuth Profile、订阅或环境绑定 ID。其他产品请使用对应说明中的资源类型与范围。
向用户展示用途、Scope、资源和到期时间,确认后调用创建接口,携带稳定的 Idempotency-Key。以下为 Token 产品示例,替换所有占位值:
{
"application_id": "<application_id>",
"environment": "sandbox",
"api_product_id": "<api_product_id>",
"scopes": ["inference.models.read", "inference.invoke"],
"resource_scope": {"resource_type": "token_product", "resource_ids": ["<product_code>"]},
"expires_at": "<future RFC3339 timestamp>",
"version": 0
}创建成功返回 201,更新成功返回 200。保存 id、application_id、environment、environment_binding_id、api_product_id、version、status、expires_at 和实际授权范围。更新时使用已查询到的原授权正版本。
独立订单支付使用 order_payment_product,请按其指南配置资源类型。
查询、核验与撤销授权
列表返回 {"items": [...]},只包含当前用户在当前企业中的授权。授权的 active 状态不替代每次请求的权限核验。
核验接口接收 grant_id、application_id、environment、api_product_id、scopes 和 resource_scope。使用上一步的有效授权配置,所请求的资源与 Scope 必须在已授权范围内。
返回 200 且 authorized=true 表示本次授权范围检查通过,目标 API 仍需检查当前资源权限。此操作只读,无需幂等键。
撤销时,向原授权 ID 的 :revoke 接口发送固定的 Idempotency-Key 和 {"version": <current_version>, "reason": "用户不再使用此应用"}。原因长度为 3–500 个字符,重试使用相同键和正文。
返回 status=revoked 后停止使用该授权。用户重新同意时会创建新记录。授权到期后,后续调用也会被拒绝。
错误与恢复
| 状态码或情况 | 处理方式 |
|---|---|
401/403 | 检查本人登录、客户企业、当前用户 Client 和业务 Scope |
409 | 查询当前版本及状态,让用户重新确认,不扩大资源范围强行重试 |
400/422 | 修正请求字段、版本和未来到期时间 |
503 或写请求超时 | 保留原正文与原 Idempotency-Key,查询状态后按幂等与重试恢复 |
确认响应前,保持授权结果待确认。
用户关联与用户授权
用户与客户空间返回用户别名和当前成员关系,不能代替用户授权、API Scope 或资源权限。两个应用可关联同一用户,授权及撤销仍分别处理。