composer install 突然要求 github 令牌是因为 github 自2021年起强制要求对私有库及高频公开库的 https 访问进行认证;需用 composer auth github.com 配置带 repo 或 public_repo 权限的 personal access token,并确保 composer ≥ 2.0。

为什么 composer install 突然要 GitHub 令牌?
GitHub 自 2021 年起废弃了对 git:// 和无认证的 HTTPS 方式访问私有仓库(以及部分高频公开仓库)的支持。当你用 Composer 安装依赖,而其中某个包托管在 GitHub 上(尤其是私有 repo 或使用 "type": "vcs" 的自定义源),Composer 默认会走 HTTPS 克隆——此时若请求频次过高或访问私有库,GitHub 就会返回 403 Forbidden,并提示 “API rate limit exceeded” 或 “requires authentication”。这不是 Composer 的 bug,是 GitHub 的 API 认证强制要求。
用 composer auth 配置 GitHub 令牌最简流程
执行以下命令,按提示输入 GitHub 的 Personal Access Token(PAT):
composer auth github.com
它会自动写入全局配置文件 ~/.composer/auth.json(Linux/macOS)或 %APPDATA%\Composer\auth.json(Windows)。该文件内容类似:
{
"github-oauth": {
"github.com": "ghp_xxx..."
}
}
- 令牌必须带
repo权限(私有库必需),若只装公开包,public_repo即可 - 不要用账号密码——GitHub 已停用密码认证;也不要复制网页 Cookie 或 GitHub App Token
- 如果项目里已有
auth.json(如放在项目根目录),Composer 会优先读取它,而非全局配置
遇到 Invalid credentials 或令牌不生效怎么办?
常见失效原因不是配置错,而是令牌本身权限或状态异常:
- 检查令牌是否已过期或被手动 revoke:登录 GitHub Settings → Tokens 确认状态
- 确认 Composer 版本 ≥ 2.0 —— 旧版(1.x)对 OAuth 头处理有缺陷,升级命令:
composer self-update - 如果公司网络走代理或 SSO,GitHub 可能返回
HTTP 401而非明确提示,此时需额外配置 Git 的凭证助手:git config --global credential.helper store,再执行一次git clone https://github.com/xxx/yyy手动触发登录缓存 - CI 环境(如 GitHub Actions)中,别硬编码令牌,应通过
${{ secrets.GITHUB_TOKEN }}注入,并在auth.json中用环境变量占位(需配合composer config github-oauth.github.com "${{ secrets.GITHUB_TOKEN }}")
不推荐但偶发有用的替代方案:改用 SSH URL
如果你已配好 GitHub SSH Key(~/.ssh/id_rsa.pub 已添加到 GitHub Account),可以绕过 OAuth,让 Composer 走 SSH 协议:
composer config -g github-protocols ssh
这会让所有 github.com 的包尝试用 git@github.com:user/repo.git 拉取。但它有硬性前提:
- 必须确保本地
ssh -T git@github.com能通(返回 “Hi xxx! You've successfully authenticated…”) - 项目
composer.json中不能显式写死 HTTPS 的repositoriesURL;否则 Composer 仍会优先走 HTTPS - 某些共享 CI 环境禁止 SSH agent 转发,此时反而更难调试
真正卡住的时候,往往不是没配令牌,而是令牌没权限、Composer 没刷新缓存、或者 Git 层自己还在用旧凭据——多看 composer install -v 输出里实际发起的 Git 命令和响应头,比反复重试更省时间。










