TokenToSea 登录概览
基于 OAuth 2.0 与 OpenID Connect 的「用 TokenToSea 登录」:识别用户身份,并在用户设定的预算内代用户调用工具与模型服务。
「TokenToSea 登录」让第三方应用:
- 识别用户:用户用 TokenToSea 账号登录你的应用,你得到稳定的用户标识(OIDC
sub)和经用户同意的资料。 - 代用户调用:用户授权后,你的应用用访问令牌调用 TokenToSea 的工具与模型服务,费用从用户自己的余额扣除,并受用户设定的累计预算与单次上限约束。
协议是标准的 OAuth 2.0 授权码模式 + PKCE(S256),并实现 OpenID Connect 的 ID Token 与 UserInfo。
地址#
Issuer:https://tokentosea.com/api/oauth
| 用途 | 地址 |
|---|---|
| 发现文档 | GET https://tokentosea.com/api/oauth/.well-known/openid-configuration |
| 授权 | GET https://tokentosea.com/api/oauth/authorize |
| 令牌(换取 / 刷新) | POST https://tokentosea.com/api/oauth/token |
| 用户信息 | GET https://tokentosea.com/api/oauth/userinfo |
| 签名公钥(JWKS) | GET https://tokentosea.com/api/oauth/jwks |
| 撤销 | POST https://tokentosea.com/api/oauth/revoke |
| 委托接口 | https://tokentosea.com/api/v1/connect/*,见委托接口 |
协议细节见 OAuth 与 OIDC。
权限范围#
| scope | 授予的能力 |
|---|---|
openid | 签发 ID Token,允许调用 UserInfo |
profile | ID Token / UserInfo 中包含 name、preferred_username |
email | 包含 email、email_verified(账号有邮箱时) |
offline_access | 签发刷新令牌 |
tools:read | 读取工具目录、操作与本授权产生的工具调用记录 |
tools:invoke | 代用户调用工具(产生费用) |
models:read | 读取委托模型目录与本授权产生的调用记录 |
models:invoke | 代用户调用委托模型(产生费用) |
wallet:read | 读取用户的可用余额 |
grant:limits | 由应用读取并修改本授权的预算与单次上限 |
应用登记时声明可申请的 scope;每次授权请求只能申请其中的一部分。用户在授权页可以取消勾选个别 scope(请求了 openid 时它不能被取消),因此请以令牌响应中的 scope 为准。
预算#
当授权包含 tools:invoke 或 models:invoke 时,用户在授权页设置两个金额(美元):
| 金额 | 规则 |
|---|---|
累计预算 budgetUsd | 本授权可花费的总额,授权时最多 USD 1000 |
单次上限 perCallUsd | 单次调用的最高费用,最多 USD 100,且不超过累计预算 |
每次调用先按最高可能费用预留在授权上,完成后按实际费用结算。预留会使「剩余 = 预算 − 已花费 − 处理中」减少,工具与模型共用同一个授权预算,并发调用也不能突破上限。超出时返回 409 oauth_budget_exceeded。用户可以在 控制台 → 开发者生态 → 已授权应用 随时修改或撤销;持有 grant:limits 的应用也可以通过接口修改(预算最多为已花费与处理中金额之和再加 USD 1000)。
不含付费 scope 的授权预算为 0,只能执行免费操作。
令牌与授权的有效期#
| 对象 | 有效期 |
|---|---|
| 授权码 | 60 秒,只能使用一次(重复使用会撤销整个授权) |
访问令牌 tts_at_… | 最长 15 分钟 |
刷新令牌 tts_rt_… | 仅在授予 offline_access 时签发;每次刷新都换发新的刷新令牌,旧令牌立即失效,重复使用会撤销整个授权 |
| 授权 | 30 天;每次成功刷新后顺延到 30 天后,连续 30 天未刷新即失效 |
| ID Token | 15 分钟(只用于登录时验证身份) |
以下情况会立即终止授权:用户撤销授权;应用被停用;应用重置客户端密钥(撤销该应用的全部授权);用户账号被停用;用户修改密码或多因素认证;用户离开授权时所在的工作区。已经开始的调用仍按已预留的预算结算。
登记应用#
在 控制台 → 开发者生态 → 我的应用 新建应用:
| 字段 | 要求 |
|---|---|
| 名称 | 2–80 个字符,显示在授权页 |
| 简介 | 10–1000 个字符,显示在授权页 |
| 网站 | 必须是 https:// 地址 |
| 回调地址 | 1–8 个,按字符串精确匹配。必须是 https://;本机开发可用 http://localhost、http://127.0.0.1、http://[::1]。不能包含 # 片段、用户名密码,或 code、state、error、iss 查询参数 |
| 权限范围 | 从上表中选择 |
| 客户端类型 | 公共客户端(单页应用、移动端、桌面端:无客户端密钥,只靠 PKCE)或机密客户端(有后端服务:另有客户端密钥) |
机密客户端的密钥 tts_cs_… 只在创建或重置时显示一次,平台只保存摘要。每个账号最多同时保留 20 个启用中的应用。应用默认是私有的;可以申请在生态目录中展示,经平台审核后公开。
委托接口能调用什么#
| 能力 | 委托接口 | 说明 |
|---|---|---|
| 工具 | 可以 | 与工具 API 相同的已接通工具 |
| 模型 | 部分 | 只覆盖模型市场中由卖家发布、经平台审核的对话服务(/api/v1/connect/chat/completions) |
官方直供模型(api.tokentosea.com) | 不可以 | 图像、视频、语音、System One 等官方型号需要用户自己的 API Key,不能通过 OAuth 令牌调用 |
OAuth 访问令牌只能用于 /api/v1/connect/* 与 UserInfo,不能访问控制台、管理后台或 api.tokentosea.com。
不支持的功能#
隐式模式、密码模式、client_credentials、动态客户端注册、静默授权(prompt=none)均不支持;max_age、acr_values、id_token_hint、claims、非 query 的 response_mode 会被明确拒绝,而不是被忽略。本实现未经过 OpenID 官方一致性认证。
下一步#
- OAuth 与 OIDC:授权请求、令牌、ID Token 校验
- 委托接口:代用户调用工具与模型
- 完整示例:Node.js 与 Python 服务端