GitHub App installation token 格式要变了?先查这 4 处最容易把集成打断的硬编码

GitHub App installation token 格式要变了?先查这 4 处最容易把集成打断的硬编码

GitHub App installation token 格式要变了?先查这 4 处最容易把集成打断的硬编码

Article type: tutorial
Voice: operator

如果你的系统里用到了 GitHub App installation token,这两天最该检查的不是权限范围,而是你有没有把它当成“固定 40 个字符的 ghs_ token”写死在代码里。

短答案先给出来:从 2026-04-27 开始,GitHub 会分阶段把 GitHub App installation token 换成更长、可变长度的新格式;只要你的集成依赖 token 长度、正则、数据库字段宽度,或者会去解析 token 内容,就有机会在 rollout 期间出问题。 对很多团队来说,这不是“认证机制重写”,而是一轮很具体的兼容性体检:先查硬编码,再查存储,再查日志和代理链路。

先把名字说准,避免术语漂移:本文讲的 GitHub App installation token,是 GitHub App 以 installation 身份调用 API 时拿到的访问令牌;GitHub 在 changelog 里也明确写了,后续分阶段 rollout 还会覆盖 GitHub Actions 发出的 GITHUB_TOKEN。它们都属于这轮格式变更的影响面,但 GitHub Enterprise Server(GHES)当前不在这次变更范围内

快速判断(2026-04-25,基于 GitHub 官方 changelog + Docs)

  • 旧的安装令牌常被客户端当成固定长度的 ghs_ 字符串处理。
  • 新格式会变成 约 520 字符、且长度可变ghs_APPID_JWT 形态。
  • GitHub 明确提醒:不要按长度校验,不要用硬编码正则,不要解析 token 内容。
  • 最容易先出问题的不是 GitHub API 本身,而是你自己代码里的校验器、数据库列、日志脱敏规则和代理中间层。

谁应该现在就查,谁可以先不着急

适合马上做这轮检查的人

  • 你维护 GitHub App,靠 installation token 调 GitHub REST API 或 GraphQL API
  • 你有 GitHub Actions 工作流,且外围代理、审计、凭证中间件会处理 GITHUB_TOKEN
  • 你们内部有 token 长度校验、正则白名单、secret masking、数据库落表或缓存层
  • 你做的是 CI/CD、代码审查、机器人集成、同步器这类“平时看起来稳定,真出问题会大面积报错”的系统

可以先按较低优先级处理的人

  • 你只在浏览器里手工用 GitHub,没写任何 GitHub App 或自动化集成
  • 你的系统从头到尾都把 token 当 opaque string,只透传,不校验,不入库,不解析
  • 你主要跑的是 GHES,而且确认当前环境不在这次云端 rollout 范围内

这次 GitHub App installation token 变更,真正会打到哪几层

GitHub 这次 changelog 最值得注意的,不是“token 更长了”这句表面信息,而是它同时改了三件事:

  1. 长度从固定短串变成约 520 字符、且可变长度
  2. 格式从传统 ghs_ 短 token,变成 ghs_APPID_JWT 这种带更多结构信息的新形式
  3. GitHub 明确要求客户端把它继续当 opaque string,不要自己验证里面的 JWT 内容

这意味着很多老代码里那些“看起来很合理”的防御式写法,反而会先把你绊倒。真正的风险不是 GitHub 发不出 token,而是你自己的系统先拒收、截断、误判,或者在链路里把它改坏了。

如果你最近关注过 TG Hubs 之前写的 GitHub 把 Copilot CLI 用成个人 command center 后,真正值得抄的不是界面,而是先问清需求再让 agent 动手这条工作流,会发现这是同一种工程判断:越底层、越稳定、越像“不会变”的接口,越不能靠默认想象写死。

先查第一处:长度假设

GitHub 在 changelog 里写得很直接:如果你的应用依赖 installation token 正好 40 个字符,新格式就可能直接把它打断。

这类问题最常见在四个位置:

  • len(token) == 40 这类显式校验
  • UI 或配置页里给 token 输入框设了长度上限
  • SDK 包装层里先做本地合法性判断,再决定是否发请求
  • secret 管理表把 token 列宽设得过窄

这也是为什么这篇文章不把角度写成“GitHub token 变长了怎么办”。真正该问的是:你的系统里有没有任何一层,把 GitHub App installation token 当成固定长度凭证。

如果有,这轮兼容性检查就不是“等用户报错再看”,而是应该在 rollout 前自己先扫一遍。

第二处:正则和前缀判断

GitHub 在官方建议里专门点名了这种写法:

ghs_[A-Za-z0-9]{36}

问题不只是这个正则不再匹配,而是很多团队会在它周围再套一层逻辑,例如:

  • 匹配不上就当成非法 token
  • 匹配不上就不做 secret masking
  • 匹配不上就拒绝写日志、缓存或代理透传
  • 匹配不上就不允许进某个内部 API

这里最容易误判的一点是:GitHub 没有取消 ghs_ 前缀,变的是前缀后面的结构和整体长度。 所以如果你只做“前缀存在即可”的非常宽松检查,问题可能不大;但如果你把“ghs_ + 固定 36 位字符”当成准入条件,兼容性风险就很高。

开发者工具栏目 里,很多文章反复讲的其实是同一件事:真正容易让工具链翻车的,常常不是核心 API,而是边上那些你以为“写死更安全”的小规则。

第三处:数据库列宽和缓存层

GitHub 这次给出的另一个很实用提醒,是数据库字段至少要能容纳 520 字符

这句话背后其实不只是数据库问题,还牵出三类常被忽略的地方:

  • Redis / KV 里为 token 预设的长度或序列化限制
  • 审计表、失败重试队列、任务快照里对 token 的截断逻辑
  • 内部工具导出 CSV、后台管理页展示、复制按钮等“边缘功能”

很多团队在主流程里把 token 当 header 透传,反而没事;真正先报错的,是异常处理、调试工具、审计落表这些侧链路。因为这些地方最容易带着“反正 token 不长”的默认假设。

如果你此前看过 GitHub 如何用 eBPF 提前拦住高风险部署:一份更实用的借鉴清单,会发现一个共同点:真正省事故的,不是等主流程炸了再查,而是先把旁路链路里的脆弱点补掉。 这次 token 格式变更,同样更像一轮“边缘层稳定性审计”。

第四处:别自己解析 token 内容

这次变更里最容易让人手痒的一点,是 GitHub 明说新格式里带 JWT。很多工程师看到这里,第一反应会是:

  • 那我能不能自己 decode 一下?
  • 能不能提前读出 installation、app id、过期时间?
  • 能不能把它当一种更聪明的本地校验机制?

GitHub 官方答案其实已经给了:不要。

原因很简单:这个 JWT 是 GitHub 内部 issuer 签的,客户端既不该验证,也不该对里面的结构做依赖。只要你把它当成“可解析,所以可以依赖”的对象,后面就等于又给自己埋了一层未来兼容性风险。

所以这轮变更里,一个很实用的判断标准是:凡是你现在想对 token 内容“顺手做点智能处理”的地方,优先都改成只把它当字符串。

一份不靠表格的 rollout 前检查清单

如果你的系统会用到 GitHub App installation tokenGITHUB_TOKEN,建议按这个顺序过一遍:

  • 搜代码里是否存在 len(token)==40token.length === 40VARCHAR(40)CHAR(40) 这类假设
  • 搜是否有 ghs_[A-Za-z0-9]{36} 或同类固定长度正则
  • 检查数据库、缓存、审计表、重试队列、配置页输入框是否能容纳至少 520 字符
  • 检查 secret masking、日志脱敏、代理转发、网关校验是否会因为格式变化失效
  • 检查任何自定义“decode token / parse token / inspect token body”的逻辑,能删就删
  • 如果你维护 GitHub Action 周边平台,额外把 GITHUB_TOKEN 相关链路也纳入扫描
  • rollout 期间保留一段更细的认证失败日志,但不要把完整 token 打进日志

哪些团队最容易在 4 月底到 6 月底之间踩坑

最容易先出问题的团队

  • 自研 GitHub App 中台、集成层、Bot 平台的团队
  • 把 token 存进数据库或任务系统的团队
  • 给 GitHub Actions 外挂了审计、网关、代理、policy 中间件的团队
  • 曾经为了“更安全”加过 token 格式白名单校验的团队

风险相对可控的团队

  • 全程透传 token、不做本地格式判断的团队
  • 只依赖官方 SDK/官方 Actions,不自己碰 token 结构的团队
  • 已经把 secrets 存储、脱敏、代理和数据库列宽做成宽松字符串处理的团队

两个常见误区

误区一:这只是 GitHub App 的事,和 Actions 无关

不对。GitHub 在 changelog 里已经明确写了,这轮 rollout 会先覆盖 GitHub Actions 发出的 GITHUB_TOKEN,以及其他 first-party featured integrations。也就是说,如果你虽然没写自定义 GitHub App,但你做了 Actions 周边平台、审计代理或企业管控层,依然可能在影响面里。

误区二:既然新格式带 JWT,那就更容易本地校验了

也不对。GitHub 说得非常明确:客户端不该依赖这个 JWT 的内容,更不该把它当成本地验证依据。对客户端来说,它依然应该是 opaque string,只是现在比过去更长、结构更复杂。

FAQ

GitHub App installation token 新格式什么时候开始 rollout?

GitHub changelog 给出的时间是从 2026-04-27 开始分阶段 rollout。第一阶段会先落到 GitHub Actions 发出的 GITHUB_TOKEN 和部分 first-party 集成,之后再逐步扩到更广泛的 GitHub App installation token。

如果我只用官方 SDK,还需要担心吗?

通常风险会小很多,但还不能直接当成零风险。因为真正容易出问题的常常不是 SDK,而是你外围的数据库、日志脱敏、代理、配置校验和内部平台层。

新 token 还是 ghs_ 开头吗?

是。GitHub 说前缀不变,installation token 仍然会以 ghs_ 开头;变化主要在后面的结构,以及整体长度从固定短串变成约 520 字符、且长度可变。

GHES 会被这轮 GitHub App installation token 变更影响吗?

按 GitHub 当前 changelog,这次变更适用于 GitHub Enterprise Cloud 和 Data Residency 环境,GitHub Enterprise Server 当前不在范围内

结论:这轮要查的不是权限,而是你有没有把 token 写死成一种长度

回到最实际的问题:GitHub App installation token 格式要变了,你现在最该做什么?

我的建议是:别先盯着 GitHub API 能不能调通,先查你自己的长度假设、正则、列宽和解析逻辑。 因为这轮变更最可能先打断的,不是 GitHub 发 token 的能力,而是你周围那一圈“为了方便和安全顺手加上的硬编码”。

如果你们已经把 GitHub App installation token 当成 opaque string 透传,这次大概率只是一次低风险兼容性确认;反过来,如果你们系统里还残留 40 字符固定正则窄字段自定义解析 这些旧假设,那么 4 月底到 6 月底这段 rollout 窗口,就值得尽快做一轮排查。

来源

Read more

Chrome 扩展里跑 Transformers.js,要先算清 3 笔账:首下体积、MV3 分工、all-urls 权限

Chrome 扩展里跑 Transformers.js,要先算清 3 笔账:首下体积、MV3 分工、all-urls 权限

Chrome 扩展里跑 Transformers.js,要先算清 3 笔账:首下体积、MV3 分工、all-urls 权限 Article type: tutorial Voice: operator 很多人看到 Hugging Face 刚放出的 Transformers.js Chrome Extension 教程,第一反应是先开一个 React 面板,把聊天框做出来再说。 但如果你真想把 Transformers.js Chrome 扩展做成能长期留在浏览器里的本地 AI 功能,最先卡住你的通常不是 UI,而是三件更硬的事:模型第一次下载到底有多大、Manifest V3 里推理该放哪一层、以及你愿不愿意为网页理解能力申请 http://*/* / https://*/* 这类全站权限。 短答案先给出来:Transformers.

By One AI
KICS 镜像被投毒后,团队现在该查什么?先按 digest 追一遍 CI 历史

KICS 镜像被投毒后,团队现在该查什么?先按 digest 追一遍 CI 历史

KICS 镜像被投毒后,团队现在该查什么?先按 digest 追一遍 CI 历史 Article type: tutorial Voice: operator 如果你的 CI 过去两天用过 checkmarx/kics,现在最该做的不是先重跑扫描,也不是先看 Docker Hub 页面,而是先按 digest 回查这段时间到底拉到了哪一个镜像,再决定要不要做凭证轮换和缓存清理。 短答案是:这次风险点不在 Docker 基础设施被攻破,而在攻击者拿到了合法发布凭证,用正常发布路径把恶意镜像推到了常用 tag 上。只要你的流水线在暴露窗口里拉过这些 tag,且扫描时能碰到云凭证、Terraform 变量、Kubernetes 配置或内部拓扑信息,就应该把它当成一次潜在泄露事件处理。 先澄清一个名字:本文说的 KICS,指的是 Checkmarx 开源的 IaC

By One AI
Hugging Face Docker Space 能跑 Arm64 吗?先查这 3 个兼容性卡点

Hugging Face Docker Space 能跑 Arm64 吗?先查这 3 个兼容性卡点

Hugging Face Docker Space 能跑 Arm64 吗?先查这 3 个兼容性卡点 Article type: tutorial Voice: reviewer 如果你打算把一个 Hugging Face Docker Space 部署到 Apple Silicon、Jetson,或者后面准备迁到 Graviton 这类 Arm64 环境,最省时间的做法不是先把镜像拉下来硬跑一遍,而是先做 3 个检查:基础镜像有没有 arm64 manifest、依赖里有没有写死 x86_64 wheel、仓库里有没有把平台假设藏在 requirements 或启动脚本里。 这篇文章的短答案是:能不能跑,不取决于它是不是 Hugging Face Docker Space,

By One AI
GitHub 如何用 eBPF 提前拦住高风险部署:一份更实用的借鉴清单

GitHub 如何用 eBPF 提前拦住高风险部署:一份更实用的借鉴清单

GitHub 如何用 eBPF 提前拦住高风险部署:一份更实用的借鉴清单 先说结论 如果把这篇 GitHub 官方工程文只读成“又一个 eBPF 用例”,就低估了它的价值。GitHub 这次真正公开的,不是一个更酷的内核技巧,而是一种新的部署安全思路:把“会不会在事故里自断修复路径”这件事,从人工 review 清单,前移成部署时就能拦截的运行时闸门。 我的判断很明确:只有那些已经在管理有状态主机、滚动发布、脚本化运维、而且最怕“出事时修不了自己”的团队,才值得借鉴 GitHub 这套 eBPF 做法;如果你现在还是普通 stateless Web 服务、发布链路很短、依赖边界也不复杂,先把依赖盘点、回滚资产、预发验证补齐,收益通常比直接上 eBPF 更大。 先给一个可提取的短答案: * 适合借鉴这套

By One AI
Follow @Fuuqius