Composer 需配置 GitHub Personal Access Token 以突破每小时60次的匿名API调用限额;未认证时所有GitHub API请求直连 api.github.com,受IP级限流,配 token 必须执行 composer config --global github-oauth.github.com ,域名严格为 github.com,且需确保 auth.json 权限为600、token 具备 public_repo(公开项目)或 repo+read:packages(私有库)权限。

直接配 GitHub Personal Access Token 就行,不配就永远卡在每小时 60 次的匿名限额里。
为什么 composer install 突然报 403 或 “API rate limit exceeded”
Composer 在解析 composer.json 时,只要遇到以下任一情况,就会调用 GitHub API(未认证):
- 依赖声明了
dev-master、dev-feature/x这类开发分支 - 包的
source类型是git,且 URL 指向 GitHub(如"url": "https://github.com/vlucas/phpdotenv.git") - 私有仓库没配置 VCS 类型,或 Packagist 缓存未命中 tag 列表
这些请求不走 Packagist 镜像,也不走 Git 克隆,而是直连 api.github.com 查元数据。未登录状态下,GitHub 对所有 IP 统一限 60 次/小时——换机器、清缓存、重装 Composer 都没用。
composer config --global github-oauth.github.com 必须写对域名
这个命令里的域名必须是 github.com,不是 api.github.com,也不是 www.github.com。Composer 内部只按字面匹配 host 名,不自动做子域继承。常见错误:
- 误配成
github-oauth.api.github.com→ 静默失效,仍走 60 次限额 - 公司用 GitHub Enterprise(如
https://git.internal.example.com)→ 必须单独配github-oauth.git.internal.example.com,且 token 要在该实例上生成 - 配完没改
auth.json权限 → Linux/macOS 下必须chmod 600 ~/.composer/auth.json,否则 Composer 直接忽略该文件
验证是否生效:运行 composer config --global --list | grep github-oauth,应看到类似 github-oauth.github.com=ghp_abc*** 的输出;再加 -v 跑一次安装,日志中出现 Using GitHub token from configuration 才算真正启用。
Token 权限和 CI 环境怎么设才安全又够用
权限宁少勿多,但不能漏关键项:
- 公开项目:只需勾选
public_repo(repo权限的子集) - 私有仓库或 GitHub Packages:必须勾选
repo+read:packages - 绝对不要勾选
write:packages、delete:packages、admin:org等高危权限 - GitHub Actions 中优先用
${{ secrets.GITHUB_TOKEN }}(自动注入,作用域默认含public_repo),命令写成composer config github-oauth.github.com $GITHUB_TOKEN(不加--global,避免污染其他 job)
硬编码 token 到 composer.json 或项目级配置里是严重风险,全局凭据管理才是标准做法。Token 一旦泄露,等同于账户被接管。
最容易被忽略的是:即使配了 token,如果 composer.lock 里还存着旧的未认证请求记录,或者用了镜像源但没关掉 VCS fallback,某些操作仍可能绕过认证走匿名请求。真要确认,就得看 composer install -v 的原始日志里有没有 Authorization: Bearer 头。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











