GitHub个人访问令牌权限疑问:公共仓库全写入?CI单仓库权限设置
问题1:GitHub个人访问令牌是否具备所有公共仓库的写入权限?
答案是否定的——默认创建的个人访问令牌(PAT)不会自动拥有任何公共仓库的写入权限。所有权限都是你在生成令牌时手动选择的:
- 如果你没勾选任何仓库相关的权限项,这个令牌甚至连公共仓库的读取权限都没有;
- 只有当你主动勾选了对应权限(比如传统权限里的
repo组,或者精细粒度权限里的仓库内容权限),令牌才会获得对应的访问能力,权限范围完全由你设置决定。
问题2:如何给CI用的令牌仅赋予单个仓库的推送权限?
要实现这个需求,你需要使用GitHub的精细粒度个人访问令牌(这是GitHub现在推荐的权限控制方式,能精准到单个仓库),具体步骤如下:
- 生成令牌时,选择「精细粒度令牌」选项,而不是传统的「范围令牌」;
- 在「仓库权限」区域,选择「仅选择仓库」,然后从下拉列表中选中你需要CI操作的目标仓库;
- 针对选中的仓库,开启必要的权限:
- 因为你要通过Electron-Builder上传到GitHub Releases,需要勾选**「内容」权限下的「写入」**(对应
contents: write); - 另外如果需要直接管理发布版本,还可以勾选**「发布」权限下的「写入」**(对应
releases: write),这两个权限完全足够完成上传操作;
- 因为你要通过Electron-Builder上传到GitHub Releases,需要勾选**「内容」权限下的「写入」**(对应
- 生成令牌后,按照Travis-CI/AppVeyor的指引,将这个令牌加密后存储为环境变量(比如命名为
GH_TOKEN),后续Electron-Builder就能通过这个令牌仅操作指定的单个仓库,不会涉及其他仓库的权限。
注意:如果使用传统的范围令牌(比如勾选
repo权限),这种权限是全局的,无法限制到单个仓库,所以一定要用精细粒度令牌的方式来实现最小权限原则。
内容的提问来源于stack exchange,提问作者user128511




