正确做法是用 composer config 命令将凭证存入 auth.json:全局执行 composer config -g http-basic.repo.example.com username password,或项目级去掉 -g;需确保域名精确匹配、特殊字符 url 编码,并注意权限与 ci 安全实践。

composer config http-basic 怎么填账号密码
直接在 composer.json 里硬编码账号密码是错的,既不安全也不可协作。正确做法是用 composer config 命令把凭证存到全局或项目级的 auth.json 里。
执行这行命令(替换为你的私有源域名、用户名和密码):
composer config -g http-basic.repo.example.com username password
它会在用户主目录下生成或更新 auth.json,内容类似:
{
"http-basic": {
"repo.example.com": {
"username": "username",
"password": "password"
}
}
}
- 如果私有源走 HTTPS 但用了自签名证书,还得额外加
composer config -g secure-http false(不推荐长期开启) -
-g是全局配置;想只对当前项目生效,去掉-g,会写入项目根目录下的auth.json - 密码里含特殊字符(比如
@或/)?先 URL 编码再填,否则composer解析会失败
私有源 require 报 401 错误的常见原因
运行 composer install 或 composer require 时提示 401 Unauthorized,不是密码错了就是认证没对上源地址。
- 检查
composer.json中repositories的url和http-basic配置的域名是否完全一致(https://pkg.example.com和pkg.example.com不等价) - 私有源启用了子路径(如
https://example.com/packagist),但http-basic配的是example.com—— 这不行,必须精确到 host 级,不含 path - 公司用了反向代理或 SSO 跳转,实际认证发生在另一个域名(比如
auth.example.com),这时要配的是那个跳转目标域名,不是你看到的仓库 URL - GitLab 或 Nexus 搭建的 Composer 源,有时需要开启「Composer API」支持,单纯放 ZIP 包不触发认证流程
auth.json 文件权限和 CI 场景怎么处理
auth.json 默认被 composer 读取,但它一旦落盘就可能泄露凭证。尤其在 CI/CD 流水线里,不能直接提交或硬编码。
- 本地开发:确保
auth.json在.gitignore里,且文件权限是600(Linux/macOS 下chmod 600 ~/.composer/auth.json) - CI 环境(如 GitHub Actions):用 secrets 注入环境变量,再用脚本动态生成
auth.json,例如:
echo '{"http-basic":{"repo.example.com":{"username":"'$USERNAME'","password":"'$TOKEN'"}}}' > auth.json
- Docker 构建:不要 COPY 整个
~/.composer,而是构建时用--build-arg传参,RUN 阶段生成临时auth.json,最后删掉 - 团队共用一个私有源但不同人权限不同?别共享
auth.json,每人自己配;服务端靠 token 粒度控制包访问范围
HTTP Basic 认证和 OAuth / Bearer Token 的区别
http-basic 只支持用户名+密码(或 token 当密码用),不等于所有私有源都接受它。有些平台(如 GitHub Packages、GitLab)优先走 Bearer 或 OAuth 认证。
- GitHub Packages 要求用
personal access token当密码填进http-basic,但 host 必须是npm.pkg.github.com(不是 github.com),否则 403 - GitLab 私有源若启用了
composer_repository功能,需在repositories的url后加/api/v4/groups/xxx/-/composer,且http-basic的 host 填 GitLab 实例域名 - 如果源返回
WWW-Authenticate: Bearer,http-basic就无效,得换方式 —— 目前 composer 原生不支持 Bearer,得靠插件(如satispress/composer-auth-plugin)或改用artifact模式离线同步
真正麻烦的从来不是配哪几行命令,而是搞清你对接的那个私有源,底层到底认哪种认证头、哪个域名在起作用、以及它有没有偷偷重定向。多抓一次 curl -v 看响应头,比反复试 config 有用得多。










