composer如何配置github-token替代oauth_composer简化GitHub认证【令牌】

4次阅读

composer install 要求输 github 账号密码是因为 github 已停用密码认证,触发 rate limit 后 composer fallback 到失效方式;正确解法是配置带 repo 权限的 personal access Token(pat)并用 composer config -g github-oauth.github.com 全局设置。

composer如何配置github-token替代oauth_composer简化GitHub认证【令牌】

为什么 composer install 突然要你输 GitHub 账号密码?

GitHub 已停用基于账号密码的 API 认证(2021 年 8 月起),现在所有通过 Composer 访问私有仓库或高频拉取公开仓库(如依赖含 dev- 分支、subtree 或大量 git 类型包)时,都会触发 rate limit,提示 Authentication failed 或要求输入用户名/密码——这其实是 Composer 在 fallback 到已失效的认证方式。

解决办法不是换回旧流程,而是用 Personal Access Token(PAT)替代。OAuth token(oauth_composer)早已过时且不被推荐,它需要额外配置 GitHub OAuth App,还容易因权限变更或 token 失效静默失败。

正确路径是:生成一个带 repo 权限的 PAT → 告诉 Composer 使用它 → 不再弹窗、不卡安装。

怎么生成并配置 GitHub Personal Access Token?

登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token → 给 token 命名(比如 composer-read-repo)→ 勾选 repo(必须;若只装公开包,public_repo 也行)→ Generate token → 复制出来(仅此一次!关页就再也看不到明文)。

然后执行:

composer config -g github-oauth.github.com <your-token-here>

注意:github.com 是域名,不能写成 https://github.com 或带路径;-g 表示全局配置(写入 ~/.composer/auth.json),如果只想对当前项目生效,去掉 -g,会写入项目根目录下的 auth.json

  • token 必须含 repo 权限,否则访问私有库仍失败
  • 别把 token 硬编码进 composer.json 或提交到 Git —— auth.json 默认被 .gitignore 排除,但得确认项目里没手动删掉这一行
  • 如果用了 GitHub Enterprise,把 github.com 换成你的实例域名(如 git.example.com

配置后还是报错?检查这几个地方

常见现象:token 配好了,composer install 却仍卡住、报 401 Unauthorized 或提示 Invalid credentials

  • 确认 token 没过期:GitHub 的 classic token 默认永不过期,但如果你勾了 Expiration 并设了短期时限,就得重生成
  • 检查 auth.json 文件权限:linux/macos 下,确保该文件不是 world-readable(chmod 600 ~/.composer/auth.json),否则 Composer 会拒绝加载
  • 确认没被项目级配置覆盖:运行 composer config github-oauth.github.com(不带 -g)看是否返回空——如果有值,说明项目 auth.json 里写了别的 token,优先级更高
  • 代理或企业防火墙可能拦截 token 请求:可临时加 -v 参数跑 composer install -v,看请求头里是否带了 Authorization: Bearer ...

composer config 管理多个 GitHub 账号或实例

如果你同时维护多个 GitHub 账号(比如公司和个人),或混用 github.com + GitHub Enterprise,不能只靠一个 github-oauth.github.com 配置。

做法是:在 auth.json 里手动写多组域名映射,例如:

{     "github-oauth": {         "github.com": "xxx-personal-token",         "git.company.com": "yyy-company-token"     } }

Composer 会自动按请求的域名匹配对应 token。注意这里键名必须是完整主机名(不含协议、端口、路径),且大小写敏感。

这种结构比反复 composer config -g 切换更可靠,也避免误把公司 token 写进个人全局配置里。

token 本身没绑定 IP 或设备,但一旦泄露就得立刻去 GitHub 后台 revoke——它等同于你的账号密码,只是权限更可控。

text=ZqhQzanResources