auth.json 应放 composer home 目录(如 ~/.composer/auth.json)全局生效,或项目根目录且需在该目录执行 composer 命令;私有仓库用 http-basic(纯域名)、github 用 github-oauth(仅 github.com);修改后须清缓存。

auth.json 文件该放哪儿才生效
Composer 只会在特定位置查找 auth.json,放错地方就完全不读——不是所有项目根目录都管用。
- 全局生效(推荐):放在 Composer 的 home 目录下,路径通常是
~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows) - 项目级生效:放在项目根目录,但必须确保该目录是
composer install或composer update执行时的当前工作目录 - 注意:
COMPOSER_HOME环境变量会覆盖默认 home 路径,执行composer config --global home可确认实际位置
私有仓库认证怎么写才不报 401
最常见的错误是把 token 或密码直接塞进 URL,或者混淆了 http-basic 和 github-oauth 的写法。
- GitLab / 自建 Satis / 私有 Packagist:用
http-basic,域名必须精确匹配(带端口、协议头都不行){ "http-basic": { "gitlab.example.com": { "username": "token", "password": "glpat-xxxxxx" } } } - GitHub:必须用
github-oauth,且 key 是github.com(不能写成api.github.com或带 www){ "github-oauth": { "github.com": "ghp_xxxxxx..." } } - 别手贱加
https://前缀到域名里——auth.json里的 host 字段只认纯域名
为什么改了 auth.json 还拉不到包
不是配置没生效,就是缓存/权限/网络链路卡在中间某一层。
- Composer 会缓存 repo 元数据,改完
auth.json后必须清缓存:composer clear-cache - 如果用了
composer config --global repo.packagist composer https://packagist.org类似命令,可能覆盖了默认行为,检查composer config --global --list - 某些公司代理会拦截 OAuth header,可临时加
-v查看真实请求头是否带Authorization: Bearer或Basic - 私有 Git 仓库(如 SSH)不需要
auth.json,走的是系统 ssh-agent 或~/.ssh/config,别混在一起配
多账号或多平台怎么安全共存
一个 auth.json 文件能同时存多个凭证,但要注意 scope 隔离和最小权限原则。
- 不同域名分开写,互不影响:
"gitlab.internal.com"和"gitlab.example.com"视为两个独立入口 - 避免把生产 token 放进团队共享的项目级
auth.json,容易误提交;全局配置更可控 - GitHub token 建议用
read:packages+delete:packages(按需),别给admin:org——真出事没法回溯是哪个命令触发的 - 敏感值不要硬编码在 CI 脚本里,CI 环境应通过 secret 注入,再由脚本生成临时
auth.json










