GitHub App的安装令牌改成无状态了,长度从40位涨到约520位

来源:互联网 时间:2026-10-03

A5站长网10月3日消息,GitHub宣布GitHub App的安装令牌无状态格式已经全面推出。这条变更的分阶段过程从今年4月27日就开始了,现在走到终点:所有新签发的安装令牌默认使用无状态格式。GitHub给出的收益很具体——令牌的签发和验证更快,API的可靠性提升。对天天跟集成打交道的团队来说,这条更新不算大,但需要检查的地方很具体。

变化落在令牌本身的样子上。旧版令牌以ghs_开头,长度固定40个字符,需要在服务端做有状态存储和验证;新版仍是ghs_前缀,但采用带应用标识与JWT的格式,长度涨到约520个字符。权限范围、仓库作用域、一小时过期时间,以及获取安装令牌的那套REST接口,这四项都没有变。变更之前签发的令牌继续有效,直到自己过期为止。

真正容易出问题的是长度。过去十年里,不少代码把令牌当成定长字符串来对待:正则里写死了40位,数据库列宽按旧上限设计,环境变量的长度校验、密钥管理系统的字段大小,都是照着这个假设配的。GitHub在公告里明确要求,所有处理安装令牌的系统都必须把它当作不透明字符串,不要去解析内容,也不要用长度或前缀去判断合法性。

排查清单官方也给了。第一类是要不要令牌恰好40个字符的验证逻辑,或者按旧格式写的模式匹配;第二类是数据库列、密钥存储或环境变量的长度上限,这些地方不放开,新令牌会在写入时就失败;第三类是代理、网关和中间件,某些实现会截断或直接拒接过长的Authorization请求头,这类问题往往只在生产环境暴露;第四类是日志记录和密钥脱敏规则,如果只匹配旧格式,新令牌可能以明文形式落进日志。

还有一条时间点要记牢。为了让开发者按需验证新格式,GitHub此前引入过一个临时请求头,用来在请求里覆盖令牌版本。这个请求头会在今年11月30日弃用,之后不再生效,符合条件的应用会一律收到无状态令牌。官方给出的行动项是:在用两种格式都验证过自己的应用和工作流之后,在该日期之前把这个请求头从生产代码里移除。

这类基础设施层的变更,特点是不做也不会立刻出问题,出问题的时候又往往已经影响到线上。稳妥的处理顺序是先在预发环境打开两种格式并行跑一段时间,把签发、使用、日志、告警这几条链路都走一遍,确认没有隐式依赖长度的地方,再切到默认。对自研集成的团队,这半天的工作量能换掉一类很难排查的故障。

相关文章

标签:

A5创业网 版权所有