composer 需 github token 是因 github 自 2021 年 8 月起停用密码及 oauth app tokens 认证,强制改用带 repo 权限的 personal access token(pat);旧 github-oauth 配置失效会导致 401、限速等错误,须通过 composer config -g github-oauth.github.com 替换,并注意配置优先级与权限设置。

composer为什么突然要GitHub token
因为 GitHub 在 2021 年 8 月后彻底停用了密码和 OAuth App tokens(github-oauth 方式)对 API 的基本认证,改用更严格的 token 认证。你执行 composer install 或 composer update 时如果遇到 401 Unauthorized、API rate limit exceeded 或提示 Failed to download ... Could not authenticate against github.com,大概率是旧的 github-oauth 配置失效了。
怎么把旧的 github-oauth 换成 personal access token
旧配置长这样(已不推荐):
{
"config": {
"github-oauth": {
"github.com": "old-oauth-token-here"
}
}
}
现在必须换成 Personal Access Token(PAT),且需带 repo 权限(私有库)或至少 public_repo(仅公开库)。操作步骤:
- 去 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc 创建新 token,勾选
repo(私有库必需)、read:packages、delete:packages(如果用 GitHub Packages) - 生成后立刻复制——页面关闭后无法再查看明文
- 运行命令写入全局配置:
composer config -g github-oauth.github.com <your-token-here></your-token-here> - 验证是否生效:
composer config -g github-oauth.github.com应输出 token 前几位(Composer 会自动掩码显示)
为什么 config -g 不起作用?常见踩坑点
不是所有场景都走全局配置,尤其当项目 composer.json 里写了 repositories 或用了 composer config 本地设置,会覆盖全局。排查要点:
- 检查当前目录是否存在
auth.json文件——它优先级最高,内容格式和composer.json一样,但只放config和认证字段 - 确认没在项目根目录下误执行过
composer config github-oauth.github.com xxx(这是本地配置,会写进项目级composer.json的config字段) - Windows 用户注意:Composer 默认读取
%APPDATA%\Composer\auth.json,不是用户主目录下的.composer/auth.json - CI 环境(如 GitHub Actions)必须用
COMPOSER_AUTH环境变量传 token,格式为 JSON 字符串:{"github-oauth":{"github.com":"xxx"}}
token 权限不够或被限速时的表现和对策
即使 token 存在,也可能因权限不足或触发速率限制失败。典型现象:
-
Could not fetch https://api.github.com/repos/xxx/xxx/zipball/xxx: 403 Forbidden→ token 缺少repo权限(尤其是访问私有库时) -
Rate limit exceeded即使有 token → 没启用 GitHub Packages 的 token 绑定,或未在composer.json中显式声明github.com为 VCS repo 类型 - 解决办法:在项目
composer.json的repositories中明确加一条:"repositories": [ { "type": "vcs", "url": "https://github.com/xxx/yyy" } ]并确保该仓库 URL 是 HTTPS 形式(不是 git@…)
token 本身没有有效期强制要求,但建议设 90 天并定期轮换;长期暴露的 token 一旦泄露,可能被用于克隆私有仓库甚至提权操作。










