auth.json需手动明文填写HTTP Basic凭据,结构为{"http-basic":{"域名":{"username":"xxx","password":"xxx"}}},域名须与仓库URL主机名完全一致,不可提交至Git,修改后需清缓存。

auth.json 里怎么填用户名和密码
Composer 不会主动帮你生成或加密凭据,auth.json 就是个纯 JSON 文件,直接写明文。它只在本地生效,**绝不能提交到 Git**。
- 文件路径必须是
COMPOSER_HOME/auth.json(通常是~/.composer/auth.json或%APPDATA%\Composer\auth.json) - 结构固定:外层是
{"http-basic": {...}},内层 key 是仓库域名,value 是含username和password的对象 - 如果用的是私有 Packagist(比如 Satis、Private Packagist),域名要和
repositories中配置的 URL 域名完全一致,包括端口和协议前缀(如https://packages.example.com→ key 就得是"packages.example.com")
{
"http-basic": {
"packages.example.com": {
"username": "alice",
"password": "topsecret123"
}
}
}
为什么 composer install 时还是提示 authentication required
常见原因是域名不匹配或权限不足,不是密码错了。
- 检查 Composer 报错里提示的域名,比如
Could not fetch https://packages.example.com/packages.json, please review your auth config: packages.example.com—— 这个packages.example.com必须一字不差出现在auth.json的 key 里 - 如果仓库地址带路径(如
https://api.example.com/v1),key 只取主机名部分(api.example.com),路径不参与匹配 - 运行
composer config --global --list看是否意外设置了全局http-basic,会覆盖auth.json - 某些私有仓库要求 token 替代密码,此时
password字段填的是 token,不是登录密码
用命令行自动写入 auth.json(避免手误)
composer config 命令能安全写入,比手动编辑更可靠,尤其适合 CI 或多人协作场景。
- 对当前项目写入(仅限该项目):
composer config http-basic.packages.example.com alice topsecret123 - 全局写入(所有项目都生效):
composer config --global http-basic.packages.example.com alice topsecret123 - 命令会自动处理 JSON 格式、转义、文件权限,还支持从环境变量读密码:
composer config --global http-basic.packages.example.com alice "${PACKAGIST_TOKEN}"
HTTP Basic 认证的兼容性边界
这个机制只影响 Composer 自己发起的 HTTP 请求,比如下载 dist 包、获取 packages.json,不涉及脚本执行或系统命令。
- PHP 7.4+ 和 cURL 后端默认支持;如果用
ext-http扩展,需确认其版本 ≥ 3.2.0,旧版可能忽略auth.json - Git 仓库(
vcs类型)走的是 Git 协议或 SSH,完全不读auth.json,别指望它能给git@地址加认证 - 某些企业防火墙或代理会剥离 Authorization 头,此时即使配置正确,也会返回 401 —— 需联系运维确认出口策略
最常被忽略的一点:Composer 会缓存 packages.json,改完 auth.json 后如果之前失败过,得先清缓存再试:composer clear-cache。










