直接配对 GitHub OAuth Token 即可解决,因 GitHub 自2021年起强制 API 认证,未认证请求限流导致403或静默失败;必须使用 classic 类型 token 并勾选 repo 权限,通过 composer config -g github-oauth.github.com 写入全局 auth.json。

直接配对 GitHub OAuth Token 就能解决,不是网络问题、不是 Composer 坏了,而是 GitHub 自 2021 年起强制所有 API 请求带认证 —— 没 token 就 403 或静默失败。
为什么 composer install 突然提示“访问被拒绝”
因为 Composer 在解析依赖、查 tag、下载 ZIP 包时,默认走 https://api.github.com/,而 GitHub 对未认证请求限流(每小时 60 次),超限就返回 403 Forbidden 或 API rate limit exceeded。这不是你本地网络或 Git 配置的问题,是 GitHub 的 API 认证机制在起作用。
- 即使你只
require一个公开包,只要它源地址指向 GitHub(比如 Packagist 上标记为 GitHub 的包),就可能触发 - 错误里出现
Could not fetch https://api.github.com/或Failed to download+401 Unauthorized,基本可锁定是 token 缺失或失效 -
git clone成功 ≠ Composer 能访问 —— SSH key 只管 git 协议,Composer 底层调 API 用的是 HTTPS + OAuth
必须用 classic 类型 token,且权限至少勾选 repo
GitHub 的 fine-grained token 不支持 Composer 所需的完整仓库读取能力(尤其私有库),必须用 classic 类型;public_repo 权限不够,私有 fork、dist 下载、元数据获取都会失败。
- 访问
https://github.com/settings/tokens/new,选 Tokens (classic) - Description 填
composer-auth方便识别 - 只勾选:
repo(必需)、read:packages(如果用 GitHub Packages)、delete:packages(按需) - 生成后立刻复制保存 —— 页面关闭后无法再查看明文
composer config -g github-oauth.github.com 是唯一推荐写入方式
这条命令会把 token 写进全局 auth.json(Linux/macOS 是 ~/.composer/auth.json,Windows 是 %APPDATA%\Composer\auth.json),后续所有项目自动生效,且 Composer 会加密存储、校验权限(要求文件权限 ≤600)。
- 别手动编辑
auth.json—— JSON 格式错一个逗号、权限设成 644,Composer 就静默忽略 - 别写进项目根目录的
auth.json—— 默认不读,除非显式加--auth参数 - 别用环境变量(如
GITHUB_TOKEN)替代 —— Composer 不认这个,只认github-oauth字段 - 执行后可用
composer config -g github-oauth.github.com验证是否存入(输出应为***)
token 失效后最易忽略的三个点
报 token has expired 或仍 401,往往不是没配,而是细节卡住了:
- 用了 fine-grained token 还以为能替代 classic —— 去
https://github.com/settings/tokens看标签,必须是 Classic - token 被手动 revoke,或启用了 SSO 却没点 “Enable SSO” 授权对应组织
- CI/CD 中挂载了旧的
auth.json,或者多个环境共用同一$COMPOSER_HOME目录导致凭据混用
重置前先 composer clear-cache,再删掉所有可能存在的 auth.json(项目根目录 + 全局路径),最后用 composer config -g 重建 —— 否则缓存的无效头可能持续干扰。


















