Fine-grained personal access tokens

细粒度个人访问令牌

GitHub Fine-grained personal access tokens.png

📝 笔记总结

Personal access tokens (classic) 设置:
repo - Full control of private repositories
Fine-grained personal access tokens 类似设置。

📖 内容来源

🔍 简单说明

Fine-grained personal access tokens

Create a fine-grained, repository-scoped token suitable for personal API use and for using Git over HTTPS.

创建一个细粒度的、仓库范围的令牌,为个人通过 API 以及 HTTPS 使用 Git 所用。

Personal access tokens (classic)

Tokens you have generated that can be used to access the GitHub API.

你已生成的、可用于访问 GitHub API 的令牌。

🔄 复刻经典权限

repo: Full control of private repositories,确实是经典令牌(Classic PAT)中最“万能”也最危险的权限。细粒度令牌(Fine-grained PAT)中,不存在、也不允许存在一个直接等同于“Full control of private repositories”的权限选项。

要复制“Full control”的效果,核心是把“访问范围”和“数据权限”都开到最大:

仓库访问范围(Repository access)

必须选择 “All repositories”

仓库数据权限(Repository permissions)

逐个手动把所有与仓库读写相关的权限都设为 “Read and write”。关键列表如下(缺一不可):

  • Contents(代码、提交、树)
  • Pull Requests
  • Issues
  • Actions(GitHub Actions)
  • Workflows(工作流文件)
  • Administration(仓库设置、分支保护规则)
  • Metadata(元数据,这个默认就有,通常不可取消)
  • Secrets(仓库和环境的密文)
  • Deployments(部署状态)
  • Environments(环境配置)

将上述所有权限都设为读写后,这个细粒度令牌就拥有了绝大多数私有仓库的“完整控制权”。

🚫 无法复刻的部分

即使你照上面全部设置了,它依然不是真正的“Full control”,主要有两个硬性限制:

  • 组织管理权限(无法绕过):如果你是组织成员而非所有者,即使令牌给了 Administration: Write,你在细粒度令牌下无法修改组织的分支保护规则或成员权限,除非你本人是组织所有者。而经典令牌的 repo 范围直接沿用你账户的现有权限,不受此限。
  • 外部仓库权限(无法覆盖):细粒度令牌的“All repositories”仅指你创建或直接所属组织下的仓库。它无法访问外部协作者邀请你加入的仓库,除非该仓库明确被选中。而经典 repo 令牌可以访问你所有能接触到的私有仓库。

⚠️ 需要完全相同的“Full control”?

只有唯一的替代方案:继续使用经典令牌(Personal access tokens (classic)),并在创建时勾选 repo 范围。但需要注意:

  • GitHub已逐步限制经典令牌的使用(自2024年起,部分操作已不支持新建经典令牌)。
  • 如果必须使用,请务必将其视为最高级别密码,绝不要写入代码或日志,并设置极短的过期时间(如30天)。

💡 总结建议

如果你是为了给CI/CD(持续集成/持续部署)系统授权,强烈不建议追求“Full control”。请只授予该CI任务必要的单个仓库和具体权限(如只需 Contents: read 来拉代码)。

如果确因历史代码或工具限制必须使用repo全权限,那么不要尝试在细粒度令牌中寻找平替——直接创建经典令牌,但务必在风险评估后启用严格的过期和审计策略。

📋 简单案例

我现在使用 Fine-grained tokens 代替 Tokens (classic),生成例如 Repo 权限全选用于从源码仓库使用 GitHub Actions 部署博客仓库的 gh-pages。

GitHub Fine-grained tokens Permissions