每个 SDK 会话(TypeScript 的
PAT 代表一个 Qoder 用户,适合必须访问该用户权限和数据的自动化。
在 Qoder Account Integrations 创建 PAT:
该函数默认读取
如果
可信服务端已经取得 PAT 时,可以直接传入:
SDK 不会自动刷新 PAT。PAT 失效后,应取得新 PAT 并创建新的 SDK 会话。
开始前,请让 Qoder 组织管理员创建 Service Account、授予应用所需权限并生成 Key。Key 应保存在密钥管理服务中,并只交给可信的服务端进程或 CI 任务。
当可信服务端已经从密钥管理服务读取 Key 时,可以直接传入:
调用方通过
SDK 将 Key 和 SAT 用于当前会话。每次创建新会话时,调用方重新传入 Key。请从密钥管理服务读取 Key,并避免把 Key 字面量写入源码、浏览器包、移动应用、日志或测试快照。
如果由集成 SDK 的宿主应用负责换取 SAT,请使用 fetch 回调形式(TypeScript 的
下面的示例展示了完整的宿主刷新逻辑:
scope 和回调返回值的含义如下:
本机已经通过
远端拒绝 token、token 过期或 CLI 以认证错误退出时,可以使用
SDK 不会自动刷新 PAT。拿到新 token 后应创建新的会话并传入新的
Python SDK 认证配置错误会抛出带
query()、Python 的 query() / QoderSDKClient)都必须配置一种认证方式。同一个会话只能选择一种:
| 认证方式 | 代表的身份 | 适用场景 |
|---|---|---|
| Personal Access Token(PAT) | Qoder 用户 | 需要使用该用户权限和数据的脚本、CI 或宿主应用 |
| Service Account | 组织工作负载 | 不应依赖个人账号的后端服务、CI 和定时任务 |
| 本机 qoderclicn 登录态 | 当前登录用户 | 已登录 Qoder 的开发者工作站 |
使用 PAT
PAT 代表一个 Qoder 用户,适合必须访问该用户权限和数据的自动化。
获取 PAT
在 Qoder Account Integrations 创建 PAT:
- 登录 Qoder。
- 打开 Account → Integrations。
- 选择有效期和所需权限并创建 PAT。
- 立即复制生成的值;页面关闭后无法再次查看。
从环境变量读取 PAT
QODERCN_PERSONAL_ACCESS_TOKEN。自定义变量名时使用:
options.env 和进程环境中存在同名变量,SDK 优先读取 options.env 中的值。
直接传入 PAT
可信服务端已经取得 PAT 时,可以直接传入:
使用 Service Account
开始前,请让 Qoder 组织管理员创建 Service Account、授予应用所需权限并生成 Key。Key 应保存在密钥管理服务中,并只交给可信的服务端进程或 CI 任务。
直接传入 Service Account Key
当可信服务端已经从密钥管理服务读取 Key 时,可以直接传入:
serviceAccount({ serviceAccountKey })(TypeScript)/ service_account(service_account_key=...)(Python)将 Key 传入本次会话。SDK 和 qoderclicn 会为会话取得并刷新短期 Service Account Token(SAT)。
宿主提供并刷新 SAT
如果由集成 SDK 的宿主应用负责换取 SAT,请使用 fetch 回调形式(TypeScript 的 serviceAccount({ fetchServiceAccountToken })、Python 的 service_account(fetch_service_account_token=...))。Service Account Key 保留在宿主进程中,qoderclicn 从宿主回调接收 SAT。
该回调由宿主实现。qoderclicn 需要 SAT 时调用该回调;宿主每次收到请求,都调用 Token exchange 接口并把响应中的新 SAT 返回给 qoderclicn。
- 换取 SAT 时,填写希望 SAT 包含的 scope。例如,需要获取模型列表并调用推理接口时,可以填写
models.read chat.completions。 - 将 Token exchange 返回的 SAT 放入回调结果;也可以同时提供 SAT 的过期时间。
- 无法取得有效 SAT 时返回
null(Python 中为None)或抛出异常,让当前会话明确失败。
复用本机登录态
本机已经通过 qoderclicn 登录时,可以让 SDK 使用同一登录态。该方式适合开发者工作站,不适合无状态 CI 或生产服务。
认证失败回调
远端拒绝 token、token 过期或 CLI 以认证错误退出时,可以使用 onAuthExpired(TypeScript)/ on_auth_expired(Python)触发重新登录或换 token 流程。每个 SDK 会话最多触发一次。
auth 配置。
错误
Python SDK 认证配置错误会抛出带 code 的异常:
- 缺少认证配置:
AuthNotConfiguredError,code == "auth_not_configured"。 - PAT 环境变量未设置:
AuthAccessTokenEnvVarError,code == "auth_access_token_env_var_not_configured"。 - Service Account Key 环境变量未设置:
AuthServiceAccountEnvVarError,code == "auth_service_account_env_var_not_configured"。
最佳实践
- 生产和 CI 中通过密钥管理服务提供凭证,不要在源码中写入凭证。
- 不要把 PAT、Service Account Key 或 SAT 写入日志、错误对象或调试输出。
- 自动化环境显式配置 PAT 或 Service Account,不要依赖本机
qoderclicn登录态。 - 对用户可见应用注册认证失败回调,把认证失败转成明确的登录提示。
- 更新或轮换凭证后创建新的 SDK 会话,不要复用已经认证失败的会话。