安全与风控
OKX CEX 登录/授权/首次配置或认证报错时:按预检门禁…
当用户要登录/授权/连接 OKX 账户、首次配置凭证,或 OKX CLI 命令报未认证/会话过期/okx-auth 缺失时,指导完成站点选择、预检、OAuth 登录、状态检查、重认证、登出和二进制管理。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
OKX CEX 登录/授权/首次配置或认特定
解决思路
- 安装 okx CLI(如未安装):运行 `npm install -g @okx_ai/okx-trade-cli`。
- 明确站点与认证方式是两个维度:支持 `global`(`www.okx.com`)、`eea`(`my.okx.com`)、`us`(`app.okx.com`);API-key 与 OAuth 都需要站点。
- 记住站点持久化规则:API-key 用户站点为 `~/.okx/config.toml` 中 `profile.site`,由 `okx config init` 写入;OAuth 用户站点在首次 `okx auth login --site <X>` 成功后保存到 `okx-auth` 二进制状态,并由 `okx auth status --json` 的 `site` 字段返回。
- 不要使用不存在的 `okx config set-site`;OAuth 流程中 agent 必须在当前对话记住用户选择,并在 `okx auth login` 时传 `--site <X>`。
- 执行 Step 0 预检:无条件重跑两条命令,不能跳过,即使上游技能已跑过 `auth status` 或给结论;并行运行 `okx config show --json` 和 `okx auth status --json`。
- 按严格顺序应用三项检查,每步短路后续检查。
- Step 0.1 站点检查:若 `config show --json` 任一 profile 的 `site` 非空,或 `auth status --json` 的 `site` 非空且 `status` 为 `logged_in` 或 `pending`,则站点已选。
- 注意当 `status` 为 `not_logged_in` 时,`auth status --json` 的 `site` 是默认占位符(通常 `"global"`),不代表用户选过,应视为不存在。
- 若站点从未选择,必须原样输出中文菜单并等待用户回复:`您需要选择要连接的 OKX 站点:`、`1) Global (www.okx.com)`、`2) EEA (my.okx.com)`、`3) US (app.okx.com)`。
- 将回复 `1`/`2`/`3` 或 `global`/`eea`/`us` 映射到站点 id 并记住;不要静默默认 `global`。
- Step 0.2 API-key 检查:解析 `config show --json`,检查是否任一 profile 的 `api_key` 非空。
- 若有 API key:停止,告诉用户 `已配置 API key (profile: <name>)`,直接继续原请求;不要运行 `okx auth login` 或 `okx config init`。
- 记住 CLI REST 客户端总是优先 API key,不会回退 OAuth;有坏 API key 时 OAuth token 不会被使用。
- 兼容检查:自 CLI `1.3.1-beta.17` 起,若任一 profile 有 `api_key`,`okx auth login` 会拒绝启动 OAuth;在 `--manual` 模式下输出 `{"status":"skipped","reason":"api_key_configured","profile":"<name>"}`,将其视为成功。
- Step 0.2.a 处理无效 API key(401/签名错误):若 Step 0.2 检测到 `api_key` profile 且后续 API 调用返回 `401 Unauthorized`、`Invalid Sign`、`Invalid API-KEY`、OKX 错误码 `50111`/`50113`,则 API key 无效,OAuth 登录不是有效修复。
- 向用户中性给出恰好两个选项,不要把 OAuth 标为推荐:1 替换 API key——用户在 OKX 网页控制台 `https://<site>/account/my-api` 生成新 key,并把 `AK/SK/PP` 提供给你,或自行重跑 `okx config init`。
- 选项 2 完全切换到 OAuth——先移除坏 API-key profile(`okx config use <other-profile>` 或删除 `~/.okx/config.toml` 中的 profile 块),然后按 Step 0.3 的 OAuth 登录流程执行。
- 等待用户选择,不要替用户决定。
- Step 0.3 OAuth 检查:使用 `auth status --json`,若 `logged_in` 则停止,按 Agent login procedure Step 3 的 `logged_in` 分支回复(仅 `site` + `scopes`,遵守排除字段规则),然后继续。
- 若 `auth status --json` 为 `pending`,说明上次登录进行中,按 Login Flow 等待用户信号;不要开始新登录,不要自动轮询。
- 若 `auth status --json` 为 `not_logged_in`,进入 Login Flow,并使用 Step 0.1 选择的站点。
- 登录前门禁:运行 `okx auth login`(含或不含 `--manual`)前,必须确认三项为真:1 已在当前对话中向用户发送 Step 0.1 的精确中文站点菜单;2 用户最近消息是站点选择(`1`/`2`/`3`/`global`/`eea`/`us`);3 即将把该确切选择作为 `--site <...>` 传入。
- 若上述任一项为假,即使上游输出、`auth status --json` 或 `config show --json` 看似暗示站点,也必须先发 Step 0.1 菜单、等待回复、重新检查门禁;`not_logged_in` 时的 `site` 占位符不满足条件 1。
- 避免反模式:上游 portfolio 技能运行 `auth status --json` 得到 `{"status":"not_logged_in","site":"global"}` 并说去登录时,不要直接运行 `okx auth login --manual --site global` 返回 URL/code;应忽略上游站点值,自己发菜单、等用户回复,再运行 `okx auth login --manual --site <用户选择>`。
- 登录流程前置:Step 0 完成且 Pre-login Gate 通过;已有用户刚在聊天中选择的站点,并确认不存在 `api_key` profile。
- 注意不带 `--manual` 的 `okx auth login` 是阻塞命令,会轮询直到用户浏览器授权。
- AI agent 必须使用 `okx auth login --manual` 避免阻塞;`--manual` 输出包含验证 URL 和用户码的 JSON 后立即退出,不阻塞。
- Agent 登录第 1 步:运行 `okx auth login --manual --site <global|eea|us>`,使用 Step 0.1 选择的站点;若返回 `{"status":"skipped","reason":"api_key_configured",...}`,说明 Step 0.2 检查已过期,重新读取 `config show --json` 并停止,不要重试。
- 若正常,CLI 打印单行 JSON:`{"verificationUri":"...","userCode":"XXXX-XXXX","expiresIn":600}`。
- Agent 登录第 2 步:必须在助手回复中展示验证 URL 和用户码,不能只放在工具输出块中;很多 UI 的工具输出面板可折叠或默认隐藏。
- 解析 JSON 并使用恰好一个模板回复,除字段替换外逐字使用,不缩写/改写/重排/翻译;中文用户用中文模板,英文用户用英文模板。
- 中文模板:`请在浏览器中打开下面的链接并输入验证码完成授权:`、`站点:<site>`、`链接:<verificationUri>`、`验证码:<userCode>`、`(有效期 <expiresIn>/60 分钟)`、`通过链接完成授权,然后告诉我。`
- 英文模板:`Please open the link below in your browser and enter the verification code to authorize:`、`Site: <site>`、`URL: <verificationUri>`、`Code: <userCode>`、`(Valid for <expiresIn/60> minutes)`、`Please authorise current session with access to your account, tell me when you are done.`
- 所有四个字段 `site`、`verificationUri`、`userCode`、`expiresIn` 都必须作为纯文本出现在助手消息中。
- Agent 登录第 3 步:等待用户发出完成信号(如 done、ok、好了、完成了);不要自动轮询。收到信号后运行一次 `okx auth status --json` 验证,然后分支。
- 若验证返回 `logged_in`:成功,使用恰好一个成功模板回复,然后在同一轮继续用户原请求。
- 成功中文模板:`登录成功。`、`站点:<site>`、`权限:<scopes>`。
- 成功英文模板:`Login successful.`、`Site: <site>`、`Scopes: <scopes>`。
- 成功回复不要包含 `auth status --json` 任何其他字段;`expiresAt`/`ttl` 指短时 access token 而非 OAuth 会话,CLI 会自动刷新;`profile` 是内部路由字段无用户价值;只有 `site` 和 `scopes` 对用户相关。
- 若被问会话寿命,说 `Session stays active as long as you use the CLI periodically.`,不要引用数字。
- 若验证返回 `pending`:授权尚未完成;告诉用户还没完成并等待另一个信号;不要自动轮询。
- 若验证返回 `not_logged_in`:设备码过期或被拒绝;询问用户是否重试。
- Agent 登录第 4 步:等待授权期间不要运行任何其他 `okx` 命令。
- 交互式登录(用户直接在终端运行):运行前告诉用户需要在浏览器授权。
- 运行 `okx auth login --site <global|eea|us>`;命令会阻塞并轮询直到用户完成授权。
- 不要假设命令卡住;轮询阶段无输出是正常的。
- 检查结果:`Logged in successfully!` 则继续原请求;`API key already configured ...` 则 Step 0.2 检查已过期,使用现有 API key;登录失败则显示错误并询问是否重试。
- 首次设置(仅 API-key 用户):`okx config init` 是 API-key 向导,提示站点、demo/live、`AK/SK/PP`;它不执行 OAuth;仅当用户明确想配置 API key 时使用。
- 运行 `okx config init`,向导步骤:选择站点:`1` Global(`www.okx.com`)、`2` EEA(`my.okx.com`)、`3` US(`app.okx.com`)。
- 向导继续:选择 Demo/live,表示该 profile 是否指向模拟交易。
- 向导继续:输入在 OKX 网页控制台创建的 `AK / SK / Passphrase`。
- `okx config init` 完成后重新运行 Step 0 预检;此时 `api_key` 会出现,Step 0.2 将短路后续登录。
- 登录状态检查:运行 `okx auth status --json` 并解析 JSON;状态 `logged_in` 有效会话,继续;`pending` 登录进行中,等待用户信号完成,不要自动轮询;`not_logged_in` 无活动会话,运行 `okx auth login --manual`。
- 重新认证(会话过期):当任何命令失败并提示 `Session expired` 或 `Run okx auth login first` 时,运行 `okx auth login --manual [--site <global|eea|us>]`(agent)或 `okx auth login [--site <global|eea|us>]`(交互式),然后遵循同一 Login Flow。
- 记住 token 过期自动管理;仅当 refresh token 本身过期(通常长时间不活动后)才需要重新认证。
- 登出:运行 `okx auth logout`;DCR 客户端注册在登出后保留,下次 `okx auth login` 更快。
- 二进制管理:`okx auth login/logout/status` 依赖 `okx-auth` 二进制;通常在 `npm install` 时自动安装,也可手动管理。
- AI agent 重要:不要手动检查平台、CDN 可用性或二进制路径;始终使用以下 CLI 命令,它们内部处理平台检测和下载。
- 安装/更新:运行 `okx auth install`;下载或更新 `okx-auth` 二进制;已是最新则报告 `up to date`;可用 `--json` 输出机器可读结果。
- 检查安装:运行 `okx auth install-status`;显示二进制是否已安装且最新;可用 `--json`。
- 移除:`okx auth remove` 交互确认;`okx auth remove --force` 跳过确认。
- 排障 `Failed to spawn okx-auth`:任一 `okx auth` 命令(`login`、`logout`、`status`)失败并提示 `Failed to spawn okx-auth`,说明二进制缺失或损坏;1 运行 `okx auth install`;2 用 `okx auth install-status` 验证;3 重试原命令。
- 错误参考:`No config found. Run okx config init first.` -> 无配置,运行 `okx config init`。
- 错误参考:`Session expired — run okx auth login again` -> refresh token 过期,运行 `okx auth login --manual`。
- 错误参考:`Authorization timed out` -> 用户未及时授权,再次运行 `okx auth login --manual`。
- 错误参考:`Access denied` -> 用户在浏览器拒绝授权,运行 `okx auth login --manual` 并请求批准。
- 错误参考:`Region restriction` (51155, 51734) -> 标的不在当前配置站点可用;检查 `okx auth status --json` 当前站点;如有需要,用 `--site` 重新登录。
- 错误参考:`Network error` during login -> 网络不可用;检查网络并重试。
- 错误参考:`Failed to spawn okx-auth` -> 二进制未安装或损坏;运行 `okx auth install`。
- 错误参考:`Installation failed: All CDN sources failed` -> 下载二进制时网络问题;检查网络并重试 `okx auth install`。
- Skill Routing:认证完成后,按请求路由:下单/取消/改单用 `okx-cex-trade`;查余额/仓位/P&L 用 `okx-cex-portfolio`;Simple Earn/On-chain Earn/DCD/AutoEarn 用 `okx-cex-earn`;Grid/DCA bots 用 `okx-cex-bot`;市场价/K线/指标用 `okx-cex-market`(无需认证)。
- 不适用于市场数据查询,使用 `okx-cex-market`。
适用边界 · 注意事项
- 不适用于纯市场数据查询;市场价、K线、指标应使用 `okx-cex-market`,无需认证。
- 已有有效 API key 配置时,不要启动 OAuth 登录;CLI 总是优先 API key,且不会回退到 OAuth。
- API key 无效(401、Invalid Sign、Invalid API-KEY、50111/50113)时,不要直接假设 OAuth 能修复;必须先替换 API key 或先移除 API-key profile。