跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

会话级 GitHub 令牌轮换

通过 gitHubTokenProvider 按会话获取与刷新用户身份,处理取消和失败。

多用户服务可以为每个 session 注册 gitHubTokenProvider,在需要时获取用户令牌,而不是给整个 runtime 永久保存同一个用户 token。每个会话独立注册,可服务不同 GitHub host 与账户。

返回 token 与有效期

const session = await client.createSession({
    gitHubTokenProvider: async ({ host, sessionId, reason }) => {
        const token = await acquireGitHubToken({ host, sessionId, reason });
        return {
            kind: "token",
            accessToken: token.value,
            expiresIn: token.secondsRemaining,
        };
    },
});

acquireGitHubToken 是应用自己的凭据获取函数。expiresIn 必须是回调完成时仍剩余的正数秒数,不能无论实际过期时间都固定返回完整生命周期。

回调收到有效 GitHub host、session ID 和 reason,后者为 initial 或 refresh。只有云端会话尚未获得 ID 时,session ID 才缺省。不要同时设置会话静态 gitHubToken 与 token provider。

创建与恢复

runtime 在创建或恢复过程中执行 initial 获取。取消、回调异常、无效结果,或令牌不能提供稳定账户身份,都会使 create/resume 失败;不会回退到环境中的其他认证。

官方支持显式取消结果,但本页不猜测未展示的取消对象字段;按所用 SDK 类型定义返回。

何时刷新

会话建立后,runtime 在每次消费凭据的操作前异步检查。令牌剩余时间 1 小时或更少时请求 refresh;空闲会话不会持续后台刷新,要等下一次需要凭据的操作。

该机制不使用后台定时器,也不包含因请求被拒绝而自动重放、401/403 challenge 传播或权限提升。应用仍需设计取得新凭据、报告失败和用户重新认证的流程。

与其他 token 区分

这是 GitHub 用户身份的会话回调。BYOK 模型提供方使用 bearerTokenProvider;组织 installation token 使用 runtime 环境并通过重启更新,不能用这里的用户回调替代。参见认证与组织服务认证。