ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

T3 Code Clerk OAuth 集成实战:PKCE 公共客户端与无头登录完整解析

T3 Code Clerk OAuth 集成实战:PKCE 公共客户端与无头登录完整解析 T3 Code Clerk OAuth 集成实战PKCE 公共客户端与无头登录完整解析【免费下载链接】t3code项目地址: https://gitcode.com/GitHub_Trending/t3/t3codeT3 Code 是一款面向 AI 编程代理的桌面/移动端协作工具它的 T3 Connect 功能通过 Clerk OAuth 集成让 CLI 以PKCE 公共客户端方式安全登录并原生支持无头登录Headless与 SSH 环境授权。本文将带你拆解这套登录体系的设计思路与关键实现。为什么 CLI 登录要用 PKCE 公共客户端传统 OAuth 客户端比如带后端的 Web 应用靠“客户端密钥client secret”证明身份。但 CLI 跑在用户自己的机器上密钥写在本地代码里等于没写。T3 Code 的解决方案是 docs/internals/t3-connect.md 中描述的OAuth Public Client PKCE模式不存密钥CLI 只注册一个公共OAuth 应用令牌交换靠 PKCE 挑战码code challenge而不是密钥挑战码一次一换每次登录随机生成 32 字节的verifier取 SHA-256 摘要得到challengeverifier 自始至终不离开当前进程令牌安全存储拿到的访问/刷新令牌通过系统密钥环持久化而不是明文文件。核心生成逻辑在 apps/server/src/cloud/CliTokenManager.ts 的makePkceRequestverifier base64url(randomBytes(32)) challenge base64url(SHA-256(verifier)) state base64url(randomBytes(16))两条授权路径本地回环 vs 无头登录T3 Code 为不同环境准备了两条登录路径由 apps/server/src/cli/connect.ts 中的authorizeCli自动选择1. 本地回环流默认适用于有浏览器的机器CLI 在127.0.0.1:34338上启动一个临时 HTTP 监听器自动打开系统浏览器跳转到托管的/connect页面用户在浏览器完成 Clerk 登录后授权码被直接重定向到http://127.0.0.1:34338/callbackCLI 校验state防 CSRF再用code_verifier换取令牌。2. 无头流--headless / SSH在 SSH 会话或--headless参数下本机没有浏览器能访问回环地址于是切换为Out-of-Band带外流程CLI 打印一个授权 URL提示你在任意一台有浏览器的设备上打开登录后托管的/connect/callback页面显示一个授权码你把这个码粘贴回终端CLI 校验后完成令牌交换。Headless authorization Open this URL on a device with a browser: https://app.t3.codes/connect#state...challenge... After signing in, return here and enter the code shown in your browser.SSH 环境的自动检测通过SSH_CONNECTION/SSH_TTY环境变量完成无需手动指定。三个容易踩坑的设计细节① 为什么 CLI 从不直接打开/oauth/authorize源码注释packages/shared/src/connectAuth.ts解释得很清楚未登录的浏览器被直接丢到/oauth/authorize会经过 Clerk 的登录重定向state、code_challenge 等查询参数会在跳转中丢失最终报unsupported_response_type或空state。所以两条流程都先经过托管/connect页面它先等 Clerk 会话建立再把参数完整转发给/oauth/authorize。② state 和 challenge 走 URL 片段fragment授权 URL 里state与code_challenge放在#之后的 hash 部分而不是 query 字符串——这样它们永远不会出现在托管服务器的访问日志或 CDN 日志里。③ 授权码捆绑 state实现无后端 CSRF 校验带外流程没有本地回调可依赖于是 CLI 把返回的授权码和 state 拼成一个整体code.state显示给你粘贴时实时校验格式与 state 匹配服务端再次做权威校验两处共用同一函数避免逻辑漂移由于 verifier 从未离开进程旁观者拿到授权码也无法换取令牌。命令速查t3 connect 命令组命令作用t3 connect login完成 Clerk 授权并保存 CLI 凭证t3 connect link授权并记录对外暴露环境的持久意图t3 connect status查看认证/链接状态支持--jsont3 connect unlink停止暴露但保留登录凭证t3 connect logout清理凭证并登出一个贴心设计unlink会保留已存储的 CLI 授权这样下次link时无需再走一遍浏览器登录。安全边界relay 不参与握手值得注意的是docs/internals/t3-connect.md 强调relay 服务不参与 OAuth 握手本身它只在 CLI 管理环境链接时校验签发的 Clerk bearer token。OAuth 的机密性边界完全由 Clerk 与 CLI 之间的 PKCE 保障relay 只负责业务侧的身份验证。小结T3 Code 的 Clerk OAuth 集成给出了一个很实用的参考样本公共客户端 PKCE 双路径授权回环/带外让同一套登录体系同时覆盖本地开发机、无头服务器和 SSH 会话。如果你正在为自己的 CLI 工具设计登录方案这套模式尤其是不直接调 authorize 端点和授权码捆绑 state两个细节非常值得借鉴。【免费下载链接】t3code项目地址: https://gitcode.com/GitHub_Trending/t3/t3code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表