应配置 GitHub Personal Access Token 并通过 composer config -g github-oauth.github.com 全局设置,Token 需含 repo 权限且不可硬编码;SSH 或 git credential 配置无效,因 Composer 依赖 GitHub API 而非 Git 协议。

Composer install/update 失败提示 403 rate limit exceeded 怎么办
这是 GitHub API 限流触发的典型错误,不是 Composer 本身问题,而是它默认用未认证方式调用 GitHub 的 Git API(比如克隆 git://github.com/... 或通过 HTTPS 获取元数据)。2021 年起 GitHub 关闭了未认证请求的匿名访问配额,尤其对 Composer 这类高频元数据扫描行为非常敏感。
解决核心是让 Composer 在访问 GitHub 时带上个人访问令牌(Personal Access Token),从而绕过匿名限流。注意:这不是给 Git 配置 SSH 或 HTTPS 凭据,而是专用于 Composer 的 GitHub API 认证。
如何生成并配置 GitHub Personal Access Token
Token 必须有 repo 权限(读取私有/公开仓库元数据必需),其他权限如 delete_repo 完全不需要。生成后,**绝不能硬编码在 composer.json 或提交到 Git**。
- 访问 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc,勾选
repo(仅此一项足够) - 生成后立即复制 Token 字符串(页面关闭后无法再次查看)
- 执行命令写入全局配置:
composer config -g github-oauth.github.com
- 验证是否生效:
composer config -g github-oauth.github.com
应输出你的 Token 前几位(Composer 会自动掩码显示)
为什么不用 git config --global credential.helper 或 SSH?
因为 Composer 的包发现和元数据拉取走的是 GitHub REST API(如 https://api.github.com/repos/vendor/package),不是 Git 协议本身。即使你用 SSH 克隆仓库成功,composer update 仍会因无 Token 调用 API 而失败。
常见误区:
- 误以为配置了
git config --global url."git@github.com:".insteadOf "https://github.com/"就能解决 —— 这只影响后续git clone行为,不影响 Composer 的 API 请求 - 把 Token 写进
auth.json但放错位置:必须放在用户主目录下的~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows),且格式要严格:{ "github-oauth": { "github.com": "ghp_xxx..." } } - Token 权限不足:只勾了
public_repo不够,必须含repo(它包含私有库访问)
企业级场景:私有 GitHub Enterprise 需额外配置域名
如果你用的是 GitHub Enterprise Server(如 https://git.example.com),Token 必须绑定对应域名,且配置命令中域名不能带协议或路径:
composer config -g github-oauth.git.example.com
同时确保 Composer 版本 ≥ 2.2(旧版不支持自定义 GitHub Enterprise 域名认证)。检查方式:
composer --version。低于该版本需升级:
composer self-update。
Token 有效期、作用域、使用痕迹都在 GitHub 后台可查,建议定期轮换,尤其当团队成员离职或 Token 泄露风险出现时。










