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 session 的请求(客户端类型、请求的能力、可选的ttl_seconds)。ClientSessionResponse:签发的 client token,以及其 session ID、client API URL 和过期时间。DeletionAccepted与Deletion:external user 数据删除的受理回执与状态。ExternalUserID:产品用户的不透明、应用内 ID。
ClientSessionInput
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
client_type | string | 是 | 客户端 token 如何绑定到将使用它的客户端。它决定你发送 origin 还是 device_attestation。 可选值: "web" — 浏览器客户端。token 绑定到你在 origin 中发送的页面来源,该来源必须是应用配置的允许来源之一。不得发送 device_attestation。与此绑定不符的请求返回 403 invalid_origin; "native" — 原生应用。token 绑定到设备密钥,其指纹由你在 device_attestation.jkt 中发送。不得发送 origin。与此绑定不符的请求返回 403 invalid_origin. (枚举表) 按 client_type 区分的结构:见变体表。 |
requested_capabilities | array<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. |
origin | string | 否 | 将使用该 token 的网页的来源,例如 https://app.example.com。client_type 为 web 时必填,且必须与应用配置的允许来源之一完全一致;否则请求返回 403 invalid_origin。client_type 为 native 时不允许,同样返回 403 invalid_origin。 约束: format=uri. |
device_attestation | object | 否 | token 所绑定的设备密钥的证明。client_type 为 native 时必填;client_type 为 web 时不允许,返回 403 invalid_origin。 |
device_attestation.jkt | string | 是 | 设备公钥的指纹,即 base64url 编码的 SHA-256 JWK 指纹,至少 16 个字符。之后的 Client API 请求必须用对应的私钥签名。 约束: minLength=16. |
ttl_seconds | integer | 否 | 本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800. |
完整字段和使用该对象的方法见附录。
ClientSessionResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
access_token | string | 是 | 作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。 |
client_api_url | string | 是 | 接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API. |
expires_at | string | 是 | 所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time. |
session_id | string | 是 | 客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。 |
app_id | string | 是 | 会话所属应用的 ID。 |
external_user_id | string | 是 | 未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。 |
capabilities | array<string> | 是 | token 可以在 Client API 上执行的操作。即请求的能力,已去重。 |
binding | Binding | 是 | token 如何绑定到客户端,与创建会话时的请求一致。 |
完整字段和使用该对象的方法见附录。
DeletionAccepted
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deletion_id | string | 是 | 删除任务的 ID。用它读取删除进度。 |
status | string | 是 | 请求被接受时删除的状态。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表) |
完整字段和使用该对象的方法见附录。
Deletion
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | 删除任务的 ID。 |
status | string | 是 | 删除的状态。轮询直到其为 completed。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表) |
deleted_resources | map<string, integer> | 是 | 目前已删除的条目数量,为把数据种类映射到计数的对象。status 为 completed 时计数为最终值。种类可能新增,因此不要依赖固定的键集合。 |
完整字段和使用该对象的方法见附录。
Binding
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
client_type | string | 是 | token 如何绑定到客户端。 可选值: "web" — 绑定到网页来源,在 origin 中返回; "native" — 绑定到设备密钥,其指纹在 cnf_jkt 中返回. (枚举表) 按 client_type 区分的结构:见变体表。 |
origin | string | 否 | token 所绑定的来源。client_type 为 web 时返回。 约束: format=uri. |
cnf_jkt | string | 否 | token 所绑定的设备密钥的指纹。client_type 为 native 时返回。 |
完整字段和使用该对象的方法见附录。
典型流程
- 为已登录的产品用户调用
identity.createClientSession创建会话,并把 token 交给客户端。 - token 过期前,用
identity.refreshClientSession轮换。 - 用
identity.revokeClientSession结束会话。 - 要清除某个用户的数据,调用
identity.deleteExternalUser,它返回DeletionAccepted;用identity.getExternalUserDeletion读取结果。
方法
| 方法 | HTTP | 摘要 |
|---|---|---|
| identity.createClientSession | POST /v1/client-sessions | 创建 client session |
| identity.revokeClientSession | DELETE /v1/client-sessions/{sessionId} | 撤销 client session |
| identity.refreshClientSession | POST /v1/client-sessions/{sessionId}/refresh | 刷新 client session |
| identity.deleteExternalUser | DELETE /v1/external-users/{externalUserId} | 开始删除外部用户数据 |
| identity.getExternalUserDeletion | GET /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 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.identity.createClientSession | createClientSession(input: Models.ClientSessionInput, idempotencyKey: string): Promise<Models.CreateClientSessionResponse> |
| Python | cloud.identity.create_client_session | def create_client_session(self, input: ClientSessionInput, options: CreateClientSessionOptions) -> ClientSessionResponse |
| Go | cloud.Identity.CreateClientSession | func (r *IdentityResource) CreateClientSession(ctx context.Context, input ClientSessionInput, options CreateClientSessionOptions) (ClientSessionResponse, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
Idempotency-Key | header | string | 是 | 让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256. |
请求体
application/json · 必填 · Schema: ClientSessionInput
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
client_type | string | 是 | 客户端 token 如何绑定到将使用它的客户端。它决定你发送 origin 还是 device_attestation。 可选值: "web" — 浏览器客户端。token 绑定到你在 origin 中发送的页面来源,该来源必须是应用配置的允许来源之一。不得发送 device_attestation。与此绑定不符的请求返回 403 invalid_origin; "native" — 原生应用。token 绑定到设备密钥,其指纹由你在 device_attestation.jkt 中发送。不得发送 origin。与此绑定不符的请求返回 403 invalid_origin. (枚举表) 按 client_type 区分的结构:见变体表。 |
requested_capabilities | array<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. |
origin | string | 否 | 将使用该 token 的网页的来源,例如 https://app.example.com。client_type 为 web 时必填,且必须与应用配置的允许来源之一完全一致;否则请求返回 403 invalid_origin。client_type 为 native 时不允许,同样返回 403 invalid_origin。 约束: format=uri. |
device_attestation | object | 否 | token 所绑定的设备密钥的证明。client_type 为 native 时必填;client_type 为 web 时不允许,返回 403 invalid_origin。 |
device_attestation.jkt | string | 是 | 设备公钥的指纹,即 base64url 编码的 SHA-256 JWK 指纹,至少 16 个字符。之后的 Client API 请求必须用对应的私钥签名。 约束: minLength=16. |
ttl_seconds | integer | 否 | 本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800. |
响应
200 短期 client token · application/json · Schema: ClientSessionResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
access_token | string | 是 | 作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。 |
client_api_url | string | 是 | 接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API. |
expires_at | string | 是 | 所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time. |
session_id | string | 是 | 客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。 |
app_id | string | 是 | 会话所属应用的 ID。 |
external_user_id | string | 是 | 未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。 |
capabilities | array<string> | 是 | token 可以在 Client API 上执行的操作。即请求的能力,已去重。 |
binding | Binding | 是 | token 如何绑定到客户端,与创建会话时的请求一致。 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 其他(default) | ErrorResponse | Cloud 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 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.identity.revokeClientSession | revokeClientSession(sessionId: string, idempotencyKey: string): Promise<Models.RevokeClientSessionResponse> |
| Python | cloud.identity.revoke_client_session | def revoke_client_session(self, session_id: str, options: RevokeClientSessionOptions) -> None |
| Go | cloud.Identity.RevokeClientSession | func (r *IdentityResource) RevokeClientSession(ctx context.Context, sessionId string, options RevokeClientSessionOptions) error |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
sessionId | path | string | 是 | 客户端会话的 ID,即创建它时返回的 session_id。 |
Idempotency-Key | header | string | 是 | 让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256. |
响应
204 会话已撤销,或此前已被撤销
无响应体。
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 其他(default) | ErrorResponse | Cloud 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 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.identity.refreshClientSession | refreshClientSession(sessionId: string, input: Models.RefreshClientSessionRequest, idempotencyKey: string): Promise<Models.RefreshClientSessionResponse> |
| Python | cloud.identity.refresh_client_session | def refresh_client_session(self, session_id: str, input: RefreshClientSessionRequest | None = None, *, options: RefreshClientSessionOptions) -> ClientSessionResponse |
| Go | cloud.Identity.RefreshClientSession | func (r *IdentityResource) RefreshClientSession(ctx context.Context, sessionId string, input *RefreshClientSessionRequest, options RefreshClientSessionOptions) (ClientSessionResponse, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
sessionId | path | string | 是 | 客户端会话的 ID,即创建它时返回的 session_id。 |
Idempotency-Key | header | string | 是 | 让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256. |
请求体
application/json · 可选
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
requested_capabilities | array<string> | 否 | 新 token 可以执行的操作。每一项都必须已授予该会话;新的集合只能相同或更窄。省略则保持当前能力。名称见 create 操作的 requested_capabilities。 约束: uniqueItems. |
ttl_seconds | integer | 否 | 本次签发请求的 token 有效期,单位为秒。显式给出的值若在 60..1800 之外,返回 400 invalid_request。 默认值: 600. 约束: minimum=60, maximum=1800. |
响应
200 已轮换的 JTI,其能力与原来相同或更窄 · application/json · Schema: ClientSessionResponse
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
access_token | string | 是 | 作为 bearer 凭证发送给 Client API 的客户端 token。它只在本次响应中显示,请在客户端安全保存,切勿记录到日志。 只写。 |
client_api_url | string | 是 | 接受 access_token 的 Client API 的基础 URL。 可选值: "https://client-api.cloud.beeos.ai/v1" — 生产环境的 Client API. |
expires_at | string | 是 | 所签发 token 的实际过期时间,受会话授权剩余有效期的上限约束。 约束: format=date-time. |
session_id | string | 是 | 客户端会话的 ID。用它刷新或撤销会话。刷新会为同一会话签发新的 token。 |
app_id | string | 是 | 会话所属应用的 ID。 |
external_user_id | string | 是 | 未使用。Cloud 不接受外部用户 ID。已存储的会话将此字段留空。 |
capabilities | array<string> | 是 | token 可以在 Client API 上执行的操作。即请求的能力,已去重。 |
binding | Binding | 是 | token 如何绑定到客户端,与创建会话时的请求一致。 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 其他(default) | ErrorResponse | Cloud 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 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.identity.deleteExternalUser | deleteExternalUser(externalUserId: string, idempotencyKey: string): Promise<Models.DeleteExternalUserResponse> |
| Python | cloud.identity.delete_external_user | def delete_external_user(self, external_user_id: ExternalUserID, options: DeleteExternalUserOptions) -> DeletionAccepted |
| Go | cloud.Identity.DeleteExternalUser | func (r *IdentityResource) DeleteExternalUser(ctx context.Context, externalUserId ExternalUserID, options DeleteExternalUserOptions) (DeletionAccepted, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
externalUserId | path | ExternalUserID | 是 | 要删除其已存储数据的终端用户 ID。1 到 128 个字符;. 和 .. 会被拒绝。这是路径上的资源 ID,不是请求头。 |
Idempotency-Key | header | string | 是 | 让本次请求可以安全重试的 key,8 到 128 个字符,首尾不含空白。用相同的 key 和相同的内容重试会返回原结果;用相同的 key 但内容不同则返回 409 idempotency_conflict。 约束: minLength=1, maxLength=256. |
响应
202 已接受异步删除 · application/json · Schema: DeletionAccepted
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deletion_id | string | 是 | 删除任务的 ID。用它读取删除进度。 |
status | string | 是 | 请求被接受时删除的状态。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表) |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 其他(default) | ErrorResponse | Cloud 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 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.identity.getExternalUserDeletion | getExternalUserDeletion(externalUserId: string, deletionId: string): Promise<Models.GetExternalUserDeletionResponse> |
| Python | cloud.identity.get_external_user_deletion | def get_external_user_deletion(self, external_user_id: ExternalUserID, deletion_id: str) -> Deletion |
| Go | cloud.Identity.GetExternalUserDeletion | func (r *IdentityResource) GetExternalUserDeletion(ctx context.Context, externalUserId ExternalUserID, deletionId string) (Deletion, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
externalUserId | path | ExternalUserID | 是 | 要删除其已存储数据的终端用户 ID。1 到 128 个字符;. 和 .. 会被拒绝。这是路径上的资源 ID,不是请求头。 |
deletionId | path | string | 是 | 删除任务的 ID,即删除操作返回的 deletion_id。 |
响应
200 限定于已认证应用的删除进度 · application/json · Schema: Deletion
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | 删除任务的 ID。 |
status | string | 是 | 删除的状态。轮询直到其为 completed。 可选值: "pending" — 删除已排队,尚未开始; "processing" — 删除正在进行; "failed" — 最近一次尝试因错误而停止,错误见 error_code。删除会自动重试; "completed" — 该用户的全部数据已被删除. (枚举表) |
deleted_resources | map<string, integer> | 是 | 目前已删除的条目数量,为把数据种类映射到计数的对象。status 为 completed 时计数为最终值。种类可能新增,因此不要依赖固定的键集合。 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 其他(default) | ErrorResponse | Cloud 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 |