Origin 安装令牌最长十五分钟
Origin 的安装访问令牌以前缀 oit_ 开头,创建后最多十五分钟失效,并且不会比签发它的 App JWT 活得更长。到期看响应里的 expiresAt。卸载或删除应用后,REST 和 Git HTTPS 会以 401 拒绝,同一枚令牌不要重试。

origin 安装令牌过期比很多从 GitHub App 迁过来的集成更短。Installation access token 这一页写:用 App JWT 调用 POST /app/installations/{installationId}/access_tokens,返回的令牌以前缀 oit_ 开头,响应里有 expiresAt。令牌在创建之后最多 15 分钟失效,而且不会晚于签发它的那枚 App JWT。文档建议的五分钟 App JWT,铸出来的安装令牌因此最多也是五分钟。
到期时间读 expiresAt,不要沿用 GitHub 的间隔
原文直接对比了 GitHub:Origin 的令牌比 GitHub App 的 installation token 更短。按 GitHub 那套间隔去复用,会在 expiresAt 之后失败。正确读法是读 expiresAt,到点再铸新的,不要假设一个固定秒数。需要用满 15 分钟时,把 App JWT 的 exp 签到能覆盖这段时间,文档举的例子是 CloneKit 的 CI 配方。
同一页要求:用的时候再铸,到期前刷新,把它当成密码,不要写进日志。空的或省略的 scopes、repositoryIds 表示继承这次安装的全部授权。你可以收窄到更少的 scope 或更少的仓库。创建接口还写:repositoryIds 最多 50 个,值必须不重复,且都在这次安装能访问的范围内。repositoryIds 可以指向一个镜像仓库,令牌仍带着安装的 scope,Origin 在每次请求上另有镜像上限。
安装令牌用于仓库范围内的操作,包括 pull request、写入 check run,以及 Git over HTTPS。要以安装所在 namespace 的成员身份行动,文档指向另一种 installation user token,不是把 oit_ 的 scope 写大。
卸载之后旧令牌直接 401
移除安装,或删除应用,会使它的安装令牌在 expiresAt 之前失效。之后 REST 和 Git over HTTPS 都用 401 拒绝。文档写:不要用同一枚令牌重试;应用必须重新安装,才能再铸出可用的令牌。
Git 推送失败时,先区分是登录和远程地址的问题,还是这枚短命令牌已经死了。登录和 origin auth login 见 Origin Git 推送失败怎么查。那篇没有写 oit_ 的 15 分钟上限。一把刚铸的令牌在卸载后立刻 401,重试同一字符串没有帮助。
写作日没有调用这个 POST,也没有把示例令牌当成真凭据。文档里的示例字符串只说明前缀和 expiresAt 的形状。