- 授权码 + 客户端密钥:适用于有后端服务器的 Web 应用
- 授权码 + PKCE:适用于原生应用、CLI 工具、单页应用等无法安全存储密钥的公共客户端
- 设备授权流程:适用于收不到浏览器回调的客户端,例如通过 SSH、容器或云端 IDE 运行的 CLI
创建 OAuth 应用
- 进入 Teable 账户的设置 > OAuth 应用页面。
- 点击新增 OAuth 应用创建新应用。
-
填写必要信息:
- OAuth 应用名称:应用的描述性名称
- 主页 URL:应用网站的完整 URL
- 回调 URL:用户授权后重定向的 URL
- 权限范围:应用所需的权限
- 启用设备授权流程:默认关闭。只有当应用需要用设备授权码登录时才开启
- 创建应用后,生成客户端密钥。请务必复制并安全保存——您将无法再次查看。
您将获得一个客户端 ID,并需要生成客户端密钥。请妥善保管这些凭据,切勿在客户端代码中暴露。如果使用 PKCE 模式,则不需要客户端密钥。
可用权限范围
权限范围定义了 OAuth 应用可以执行的操作。可用范围按资源类型组织:OAuth 2.0 授权码流程
Teable 实现了标准的 OAuth 2.0 授权码流程:步骤 1:将用户重定向到授权页面
使用应用参数将用户引导到授权端点:
示例:
步骤 2:用户授权
用户将看到授权页面,显示:- 您的应用名称和标志
- 请求的权限(范围)
- 批准或拒绝选项
步骤 3:处理回调
用户批准(或拒绝)后,Teable 会重定向到您的回调 URL: 成功时:步骤 4:用授权码换取令牌
用授权码换取访问令牌和刷新令牌:
请求示例:
PKCE 授权流程
PKCE(Proof Key for Code Exchange)是为无法安全存储客户端密钥的应用设计的授权模式,如原生桌面应用、移动应用、CLI 工具或单页应用。步骤 1:生成 PKCE 参数
在发起授权前,客户端需要生成一对 PKCE 参数:步骤 2:将用户重定向到授权页面
示例:
步骤 3:处理回调
与标准授权码流程相同,用户批准后会携带code 重定向到您的回调地址。
步骤 4:用授权码 + code_verifier 换取令牌
PKCE 模式不需要
client_secret,用 code_verifier 代替密钥来验证客户端身份。设备授权流程
设备授权流程(RFC 8628)适用于收不到浏览器回调的客户端:通过 SSH、容器或云端 IDE 运行的 CLI。客户端显示一个网址和一个短授权码,用户在任意浏览器中确认,不需要把任何内容粘回终端。 Teable 遵循 RFC 8628,大多数 OAuth 客户端库不用改代码就能跑通这个流程。下面只列 Teable 这一侧的约定。申请设备授权码
POST /api/oauth/device/code,传入 client_id 和可选的 scope。这个接口不需要认证,按 IP 限流,默认每 15 分钟 30 次。
BACKEND_OAUTH_DEVICE_CODE_EXPIRE_IN),interval 是两次轮询之间至少要等待的秒数。
同时打印 verification_uri 和 user_code。用户在该页面登录后输入授权码,确认应用名称、主页和申请的权限范围,然后同意或拒绝。页面会提醒用户不要确认并非自己发起的授权码。每个授权码只能使用一次。
Teable 不返回
verification_uri_complete,客户端也不要自己拼一个。授权码一旦被确认,就等于把确认者的 Teable 账号登录到了那台设备上,而带着授权码的链接正是设备码钓鱼所依赖的形式。轮询获取令牌
POST /api/oauth/access_token,传入 grant_type=urn:ietf:params:oauth:grant-type:device_code、device_code 和 client_id。公共客户端不需要 client_secret,机密客户端和其他流程一样带上即可。
在用户确认之前,该接口返回错误而不是令牌:
用户确认后,返回的令牌结构与其他流程相同。
使用访问令牌
在 API 请求的Authorization 头中包含访问令牌:
baseId 用于后续 API 调用。
刷新访问令牌
当访问令牌过期时,使用刷新令牌获取新的访问令牌:
请求示例:
撤销访问权限
OAuth 应用所有者
撤销该应用对所有用户的访问权限(仅应用创建者可操作):用户撤销自己的授权
撤销当前用户对某个应用的授权:应用程序自行撤销
应用程序可以使用 Access Token 撤销自己的访问权限:此端点仅接受 Access Token 认证,不支持 Session 认证。
令牌过期时间
错误处理
常见错误响应:最佳实践
- 选择合适的模式:有后端服务器的 Web 应用使用客户端密钥模式,原生应用/CLI/SPA 使用 PKCE 模式,收不到浏览器回调的客户端使用设备授权流程
- 安全存储密钥:切勿在客户端代码中暴露您的客户端密钥
- 使用 state 参数:始终包含随机的
state参数以防止 CSRF 攻击 - 请求最小权限范围:只请求应用实际需要的权限
- 处理令牌刷新:在令牌过期前实现自动刷新
- 安全存储令牌:将访问令牌和刷新令牌安全地存储在服务器端

