文档Cloud SDK 参考

BEEOS CLOUD / DEVELOPER REFERENCE

身份

面向浏览器与移动端的 client session,以及 external user 的数据删除。

概览

identity domain 管理你的后端所代表的产品用户。它签发、刷新和撤销 client session(面向 web 或 native 客户端的短期 client token),并发起和跟踪 external user 的数据删除。除读取删除状态外,这里的每个操作都需要 Idempotency-Key。

5 个操作 · SDK 资源:TypeScript cloud.identity · Python cloud.identity · Go cloud.Identity · API 总览

主要对象

ClientSessionInput

字段类型必填说明
client_typestring是客户端 token 如何绑定到将使用它的客户端。它决定你发送 origin 还是 device_attestation。 可选值: "web" — 浏览器客户端。token 绑定到你在 origin 中发送的页面来源,该来源必须是应用配置的允许来源之一。不得发送 device_attestation。与此绑定不符的请求返回 403 invalid_origin; "native" — 原生应用。token 绑定到设备密钥,其指纹由你在 device_attestation.jkt 中发送。不得发送 origin。与此绑定不符的请求返回 403 invalid_origin. (枚举表) 按 client_type 区分的结构:见变体表。
requested_capabilitiesarray<string>是客户端 token 可以在 Client API 上执行的操作,1 个或多个互不相同的名称。每个名称必须是 context:read、instances:read、instances:write、agents:read、agents:invoke、files:read、files:write、files:delete、events:read、viewer:connect 和 terminal:connect 之一,并且必须是你应用的客户端所允许的。其他任何名称返回 403 invalid_capability。 约束: minItems=1, uniqueItems.
originstring否将使用该 token 的网页的来源,例如 https://app.example.com。client_type 为 web 时必填,且必须与应用配置的允许来源之一完全一致;否则请求返回 403 invalid_origin。client_type 为 native 时不允许,同样返回 403 invalid_origin。 约束: format=uri.
device_attestationobject否token 所绑定的设备密钥的证明。client_type 为 native 时必填;client_type 为 web 时不允许,返回 403 invalid_origin。
device_attestation.jktstring是设备公钥的指纹,即 base64url 编码的 SHA-256 JWK 指纹,至少 16 个字符。之后的 Client API 请求必须用对应的私钥签名。 约束: minLength=16.
ttl_secondsinteger否本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800.

完整字段和使用该对象的方法见附录。

ClientSessionResponse

字段类型必填说明
access_tokenstring是作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。
client_api_urlstring是接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API.
expires_atstring是所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time.
session_idstring是客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。
app_idstring是会话所属应用的 ID。
external_user_idstring是未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。
capabilitiesarray<string>是token 可以在 Client API 上执行的操作。即请求的能力,已去重。
bindingBinding是token 如何绑定到客户端,与创建会话时的请求一致。

完整字段和使用该对象的方法见附录。

DeletionAccepted

字段类型必填说明
deletion_idstring是删除任务的 ID。用它读取删除进度。
statusstring是请求被接受时删除的状态。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表)

完整字段和使用该对象的方法见附录。

Deletion

字段类型必填说明
idstring是删除任务的 ID。
statusstring是删除的状态。轮询直到其为 completed。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表)
deleted_resourcesmap<string, integer>是目前已删除的条目数量,为把数据种类映射到计数的对象。status 为 completed 时计数为最终值。种类可能新增,因此不要依赖固定的键集合。

完整字段和使用该对象的方法见附录。

Binding

字段类型必填说明
client_typestring是token 如何绑定到客户端。 可选值: "web" — 绑定到网页来源,在 origin 中返回; "native" — 绑定到设备密钥,其指纹在 cnf_jkt 中返回. (枚举表) 按 client_type 区分的结构:见变体表。
originstring否token 所绑定的来源。client_type 为 web 时返回。 约束: format=uri.
cnf_jktstring否token 所绑定的设备密钥的指纹。client_type 为 native 时返回。

完整字段和使用该对象的方法见附录。

典型流程

  1. 为已登录的产品用户调用 identity.createClientSession 创建会话,并把 token 交给客户端。
  2. token 过期前,用 identity.refreshClientSession 轮换。
  3. 用 identity.revokeClientSession 结束会话。
  4. 要清除某个用户的数据,调用 identity.deleteExternalUser,它返回 DeletionAccepted;用 identity.getExternalUserDeletion 读取结果。

方法

方法HTTP摘要
identity.createClientSessionPOST /v1/client-sessions创建 client session
identity.revokeClientSessionDELETE /v1/client-sessions/{sessionId}撤销 client session
identity.refreshClientSessionPOST /v1/client-sessions/{sessionId}/refresh刷新 client session
identity.deleteExternalUserDELETE /v1/external-users/{externalUserId}开始删除外部用户数据
identity.getExternalUserDeletionGET /v1/external-users/{externalUserId}/deletions/{deletionId}获取一次外部用户数据删除

identity.createClientSession

POST /v1/client-sessions · Operation ID createClientSession

创建 client session

签发 client token,ttl_seconds 作用于本次请求。省略时在幂等比较之前归一化为 600;用不同的归一化 TTL 复用同一个 Idempotency-Key 会返回 409 idempotency_conflict。

必须携带 Idempotency-Key。

SDK 方法

语言方法签名
TypeScriptcloud.identity.createClientSessioncreateClientSession(input: Models.ClientSessionInput, idempotencyKey: string): Promise<Models.CreateClientSessionResponse>
Pythoncloud.identity.create_client_sessiondef create_client_session(self, input: ClientSessionInput, options: CreateClientSessionOptions) -> ClientSessionResponse
Gocloud.Identity.CreateClientSessionfunc (r *IdentityResource) CreateClientSession(ctx context.Context, input ClientSessionInput, options CreateClientSessionOptions) (ClientSessionResponse, error)

参数

参数位置类型必填说明
Idempotency-Keyheaderstring是让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256.

请求体

application/json · 必填 · Schema: ClientSessionInput

字段类型必填说明
client_typestring是客户端 token 如何绑定到将使用它的客户端。它决定你发送 origin 还是 device_attestation。 可选值: "web" — 浏览器客户端。token 绑定到你在 origin 中发送的页面来源,该来源必须是应用配置的允许来源之一。不得发送 device_attestation。与此绑定不符的请求返回 403 invalid_origin; "native" — 原生应用。token 绑定到设备密钥,其指纹由你在 device_attestation.jkt 中发送。不得发送 origin。与此绑定不符的请求返回 403 invalid_origin. (枚举表) 按 client_type 区分的结构:见变体表。
requested_capabilitiesarray<string>是客户端 token 可以在 Client API 上执行的操作,1 个或多个互不相同的名称。每个名称必须是 context:read、instances:read、instances:write、agents:read、agents:invoke、files:read、files:write、files:delete、events:read、viewer:connect 和 terminal:connect 之一,并且必须是你应用的客户端所允许的。其他任何名称返回 403 invalid_capability。 约束: minItems=1, uniqueItems.
originstring否将使用该 token 的网页的来源,例如 https://app.example.com。client_type 为 web 时必填,且必须与应用配置的允许来源之一完全一致;否则请求返回 403 invalid_origin。client_type 为 native 时不允许,同样返回 403 invalid_origin。 约束: format=uri.
device_attestationobject否token 所绑定的设备密钥的证明。client_type 为 native 时必填;client_type 为 web 时不允许,返回 403 invalid_origin。
device_attestation.jktstring是设备公钥的指纹,即 base64url 编码的 SHA-256 JWK 指纹,至少 16 个字符。之后的 Client API 请求必须用对应的私钥签名。 约束: minLength=16.
ttl_secondsinteger否本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800.

响应

200 短期 client token · application/json · Schema: ClientSessionResponse

字段类型必填说明
access_tokenstring是作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。
client_api_urlstring是接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API.
expires_atstring是所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time.
session_idstring是客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。
app_idstring是会话所属应用的 ID。
external_user_idstring是未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。
capabilitiesarray<string>是token 可以在 Client API 上执行的操作。即请求的能力,已去重。
bindingBinding是token 如何绑定到客户端,与创建会话时的请求一致。

错误

状态码Schema说明
其他(default)ErrorResponseCloud Server 错误

错误 schema 见错误。

示例

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: "https://api.cloud.beeos.ai/v1",
  apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.identity.createClientSession({
  client_type: "web",
  requested_capabilities: ["example_requested_capabilities"]
}, "YOUR_IDEMPOTENCY_KEY");
console.log(result);

identity.revokeClientSession

DELETE /v1/client-sessions/{sessionId} · Operation ID revokeClientSession

撤销 client session

必须携带 Idempotency-Key。

SDK 方法

语言方法签名
TypeScriptcloud.identity.revokeClientSessionrevokeClientSession(sessionId: string, idempotencyKey: string): Promise<Models.RevokeClientSessionResponse>
Pythoncloud.identity.revoke_client_sessiondef revoke_client_session(self, session_id: str, options: RevokeClientSessionOptions) -> None
Gocloud.Identity.RevokeClientSessionfunc (r *IdentityResource) RevokeClientSession(ctx context.Context, sessionId string, options RevokeClientSessionOptions) error

参数

参数位置类型必填说明
sessionIdpathstring是客户端会话的 ID,即创建它时返回的 session_id。
Idempotency-Keyheaderstring是让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256.

响应

204 会话已撤销,或此前已被撤销

无响应体。

错误

状态码Schema说明
其他(default)ErrorResponseCloud Server 错误

错误 schema 见错误。

示例

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: "https://api.cloud.beeos.ai/v1",
  apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.identity.revokeClientSession("session_123", "YOUR_IDEMPOTENCY_KEY");
console.log(result);

identity.refreshClientSession

POST /v1/client-sessions/{sessionId}/refresh · Operation ID refreshClientSession

刷新 client session

轮换 client token,ttl_seconds 作用于本次请求。省略时在幂等比较之前归一化为 600;用不同的归一化 TTL 复用同一个 Idempotency-Key 会返回 409 idempotency_conflict。

必须携带 Idempotency-Key。

SDK 方法

语言方法签名
TypeScriptcloud.identity.refreshClientSessionrefreshClientSession(sessionId: string, input: Models.RefreshClientSessionRequest, idempotencyKey: string): Promise<Models.RefreshClientSessionResponse>
Pythoncloud.identity.refresh_client_sessiondef refresh_client_session(self, session_id: str, input: RefreshClientSessionRequest | None = None, *, options: RefreshClientSessionOptions) -> ClientSessionResponse
Gocloud.Identity.RefreshClientSessionfunc (r *IdentityResource) RefreshClientSession(ctx context.Context, sessionId string, input *RefreshClientSessionRequest, options RefreshClientSessionOptions) (ClientSessionResponse, error)

参数

参数位置类型必填说明
sessionIdpathstring是客户端会话的 ID,即创建它时返回的 session_id。
Idempotency-Keyheaderstring是让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256.

请求体

application/json · 可选

字段类型必填说明
requested_capabilitiesarray<string>否新 token 可以执行的操作。每一项都必须已授予该会话;新的集合只能相同或更窄。省略则保持当前能力。名称见 create 操作的 requested_capabilities。 约束: uniqueItems.
ttl_secondsinteger否本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800.

响应

200 已轮换的 JTI,其能力与原来相同或更窄 · application/json · Schema: ClientSessionResponse

字段类型必填说明
access_tokenstring是作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。
client_api_urlstring是接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API.
expires_atstring是所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time.
session_idstring是客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。
app_idstring是会话所属应用的 ID。
external_user_idstring是未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。
capabilitiesarray<string>是token 可以在 Client API 上执行的操作。即请求的能力,已去重。
bindingBinding是token 如何绑定到客户端,与创建会话时的请求一致。

错误

状态码Schema说明
其他(default)ErrorResponseCloud Server 错误

错误 schema 见错误。

示例

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: "https://api.cloud.beeos.ai/v1",
  apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.identity.refreshClientSession("session_123", {}, "YOUR_IDEMPOTENCY_KEY");
console.log(result);

identity.deleteExternalUser

DELETE /v1/external-users/{externalUserId} · Operation ID deleteExternalUser

开始删除外部用户数据

必须携带 Idempotency-Key。

SDK 方法

语言方法签名
TypeScriptcloud.identity.deleteExternalUserdeleteExternalUser(externalUserId: string, idempotencyKey: string): Promise<Models.DeleteExternalUserResponse>
Pythoncloud.identity.delete_external_userdef delete_external_user(self, external_user_id: ExternalUserID, options: DeleteExternalUserOptions) -> DeletionAccepted
Gocloud.Identity.DeleteExternalUserfunc (r *IdentityResource) DeleteExternalUser(ctx context.Context, externalUserId ExternalUserID, options DeleteExternalUserOptions) (DeletionAccepted, error)

参数

参数位置类型必填说明
externalUserIdpathExternalUserID是要删除其已存储数据的终端用户 ID。1 到 128 个字符;. 和 .. 会被拒绝。这是路径上的资源 ID,不是请求头。
Idempotency-Keyheaderstring是让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256.

响应

202 已接受异步删除 · application/json · Schema: DeletionAccepted

字段类型必填说明
deletion_idstring是删除任务的 ID。用它读取删除进度。
statusstring是请求被接受时删除的状态。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表)

错误

状态码Schema说明
其他(default)ErrorResponseCloud Server 错误

错误 schema 见错误。

示例

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: "https://api.cloud.beeos.ai/v1",
  apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.identity.deleteExternalUser("external_user_123", "YOUR_IDEMPOTENCY_KEY");
console.log(result);

identity.getExternalUserDeletion

GET /v1/external-users/{externalUserId}/deletions/{deletionId} · Operation ID getExternalUserDeletion

获取一次外部用户数据删除

不得携带 Idempotency-Key。

SDK 方法

语言方法签名
TypeScriptcloud.identity.getExternalUserDeletiongetExternalUserDeletion(externalUserId: string, deletionId: string): Promise<Models.GetExternalUserDeletionResponse>
Pythoncloud.identity.get_external_user_deletiondef get_external_user_deletion(self, external_user_id: ExternalUserID, deletion_id: str) -> Deletion
Gocloud.Identity.GetExternalUserDeletionfunc (r *IdentityResource) GetExternalUserDeletion(ctx context.Context, externalUserId ExternalUserID, deletionId string) (Deletion, error)

参数

参数位置类型必填说明
externalUserIdpathExternalUserID是要删除其已存储数据的终端用户 ID。1 到 128 个字符;. 和 .. 会被拒绝。这是路径上的资源 ID,不是请求头。
deletionIdpathstring是删除任务的 ID,即删除操作返回的 deletion_id。

响应

200 限定于已认证应用的删除进度 · application/json · Schema: Deletion

字段类型必填说明
idstring是删除任务的 ID。
statusstring是删除的状态。轮询直到其为 completed。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表)
deleted_resourcesmap<string, integer>是目前已删除的条目数量,为把数据种类映射到计数的对象。status 为 completed 时计数为最终值。种类可能新增,因此不要依赖固定的键集合。

错误

状态码Schema说明
其他(default)ErrorResponseCloud Server 错误

错误 schema 见错误。

示例

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: "https://api.cloud.beeos.ai/v1",
  apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.identity.getExternalUserDeletion("external_user_123", "deletion_123");
console.log(result);

按判别字段区分的结构

Binding 按 client_type 区分

Binding 的结构取决于它自己的 client_type 值。

client_type 的取值说明结构
"web"绑定到网页来源,在 origin 中返回。BindingWeb
"native"绑定到设备密钥,其指纹在 cnf_jkt 中返回。BindingNative

ClientSessionInput 按 client_type 区分

ClientSessionInput 的结构取决于它自己的 client_type 值。

client_type 的取值说明结构
"web"浏览器客户端。token 绑定到你在 origin 中发送的页面来源,该来源必须是应用配置的允许来源之一。不得发送 device_attestation。与此绑定不符的请求返回 403 invalid_origin。ClientSessionInputWeb
"native"原生应用。token 绑定到设备密钥,其指纹由你在 device_attestation.jkt 中发送。不得发送 origin。与此绑定不符的请求返回 403 invalid_origin。ClientSessionInputNative