配了token仍报403或429,主因是环境未对齐:token类型须为classic且勾选repo,host名必须严格匹配github.com,权限位600,配置用户与运行用户一致,ci需用secrets安全注入。

为什么配了Token还是报403或429
配了Token却仍触发限流,几乎都不是Token写错了,而是环境没对齐。Composer只在满足全部条件时才真正带上Authorization: Bearer头:
- 执行
composer config --global github-oauth.github.com <token></token>的用户,必须和运行composer install的是同一个用户(CI里常见root配、www-data跑) -
~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows)权限必须是600,否则Composer静默忽略该文件 - 项目根目录下若存在
auth.json,它会覆盖全局配置——用composer config --list确认实际生效位置 - 公司代理或防火墙可能剥离
Authorization请求头;可用curl -H "Authorization: token <your_token>" https://api.github.com/rate_limit</your_token>单独验证是否通
生成Token必须选classic类型且勾选repo
Composer目前(2026年中)不兼容fine-grained token,哪怕权限全开也会静默失败。必须用classic类型:
批量替换指定目录下所有 Git 仓库的远程地址(remote URL)。 当用户需要将 Git 仓库从一个服务器迁移到另一个服务器时使用。 触发词:git remote 替换、git url 批量修改、git 仓库迁移、更换 git 地址、批量修改 remote url。
- 访问
https://github.com/settings/tokens/new - 填写Note(如
composer-token-2026),过期时间建议设为30天 - 必须勾选
repo(含public_repo和私有库读取能力),仅勾public_repo在某些fork包场景下会静默失败 - 如果用GitHub Packages,额外勾选
read:packages;不要勾delete_repo等高危项 - 生成后立即复制——页面关闭即不可再查
配置命令必须写github.com,不能写api.github.com
Composer内部做域名匹配,只认你配置的host名,不自动继承子域。写错就等于没配:
- 正确命令:
composer config --global github-oauth.github.com <your_token></your_token> - 错误写法:
github-oauth.api.github.com、github-oauth.www.github.com、漏掉github.com部分 - 验证是否写入成功:
composer config --global --list | grep github-oauth,应看到github-oauth.github.com条目 - 若已错配,先删掉:
composer config --global --unset github-oauth.api.github.com,再重配
CI环境要用secrets注入,别硬编码
CI里不能把Token写死在脚本或composer.json里,否则泄露风险极高:
- GitHub Actions直接用
${{ secrets.GITHUB_TOKEN }}(注意:不是个人Token,是Actions自动提供的临时token) - 命令写成:
composer config github-oauth.github.com "${{ secrets.GITHUB_TOKEN }}"(不加--global,避免污染runner全局配置) - 其他CI平台(如GitLab CI、Jenkins)需通过安全环境变量传入,再用
composer config github-oauth.github.com "$GITHUB_TOKEN" - 绝对不要用
echo $TOKEN | composer config ...,会留在shell history里
composer install就继续走每小时60次的匿名通道。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










